Skip to content

Commit

Permalink
SP URI contructors are private (#39); closes #30
Browse files Browse the repository at this point in the history
SP URI contructors are private; closes #30

Providing a public method that can be used to create SP instances based
on SPInfo instances. This method can be dynically called to update the
set of provided SPs.

Introducing a containsKey method as well.

Also closes #36: Extra semicolon inserted in the SP Info class if the
instance id was customised
  • Loading branch information
jadelkhoury authored and berezovskyi committed Sep 8, 2018
1 parent 75bc369 commit 5c2b0d3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 23 deletions.
Expand Up @@ -78,6 +78,7 @@ import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;

import org.eclipse.lyo.oslc4j.core.exception.OslcCoreApplicationException;
import org.eclipse.lyo.oslc4j.core.model.Publisher;
import org.eclipse.lyo.oslc4j.core.model.Service;
import org.eclipse.lyo.oslc4j.core.model.ServiceProvider;
Expand Down Expand Up @@ -179,6 +180,10 @@ public class [javaClassNameForSingleton(aServiceProviderCatalog) /]
return identifier;
}

public static boolean contains[aServiceProvider.javaName(true)/]([aServiceProvider.instanceMethodSignature() /]) {
return serviceProviders.containsKey([aServiceProvider.javaName(false)/]Identifier([aServiceProvider.instanceMethodParameterList()/]));
}

public static ServiceProvider get[aServiceProvider.javaName(true)/](HttpServletRequest httpServletRequest, [aServiceProvider.instanceMethodSignature() /])
{
ServiceProvider serviceProvider;
Expand All @@ -204,6 +209,32 @@ public class [javaClassNameForSingleton(aServiceProviderCatalog) /]
throw new WebApplicationException(Status.NOT_FOUND);
}

public static ServiceProvider create[aServiceProvider.javaName(true)/](final [javaClassName(aServiceProvider) /] serviceProviderInfo)
throws OslcCoreApplicationException, URISyntaxException, IllegalArgumentException {
String basePath = OSLC4JUtils.getServletURI();
String identifier = [aServiceProvider.javaName(false)/]Identifier([for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')]serviceProviderInfo.[instanceCompositeID /][/for]);
if (contains[aServiceProvider.javaName(true)/]([for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')]serviceProviderInfo.[instanceCompositeID /][/for])) {
throw new IllegalArgumentException(String.format("The SP '%s' was already registered", identifier));
}

String serviceProviderName = serviceProviderInfo.name;
String title = String.format("Service Provider '%s'", serviceProviderName);
String description = String.format("%s (id: %s; kind: %s)",
"[aServiceProvider.description /]",
identifier,
"[aServiceProvider.title /]");
[if (aServiceProvider.publisher.oclIsUndefined())]
Publisher publisher = null;
[else]
Publisher publisher = new Publisher("[aServiceProvider.publisher.title /]", "[aServiceProvider.publisher.identifier /]");
[/if]
Map<String, Object> parameterMap = new HashMap<String, Object>();
[for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(lineSeparator())]
parameterMap.put("[instanceCompositeID /]", serviceProviderInfo.[instanceCompositeID /]);
[/for]
return [javaClassNameForFactory(aServiceProvider) /].createServiceProvider(basePath, title, description, publisher, parameterMap);
}

public static ServiceProvider register[aServiceProvider.javaName(true)/](final HttpServletRequest httpServletRequest,
final ServiceProvider serviceProvider,
[aServiceProvider.instanceMethodSignature() /])
Expand Down Expand Up @@ -313,31 +344,12 @@ public class [javaClassNameForSingleton(aServiceProviderCatalog) /]
// [protected ('initServiceProviders')]
// [/protected]

String basePath = OSLC4JUtils.getServletURI();
[for (aServiceProvider: ServiceProvider | aServiceProviderCatalog.serviceProviders)]

[javaClassName(aServiceProvider) /] [ '[' ']' /] [javaClassName(aServiceProvider).toLowerFirst()/]s = [javaClassNameForAdaptorManager(containingAdaptorInterface(aServiceProviderCatalog)) /].get[aServiceProvider.javaClassName()/]s(httpServletRequest);
//Register each service provider
for ([javaClassName(aServiceProvider) /] serviceProviderInfo : [javaClassName(aServiceProvider).toLowerFirst()/]s) {
String identifier = [aServiceProvider.javaName(false)/]Identifier([for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')
]serviceProviderInfo.[instanceCompositeID /][/for]);
if (!serviceProviders.containsKey(identifier)) {
String serviceProviderName = serviceProviderInfo.name;
String title = String.format("Service Provider '%s'", serviceProviderName);
String description = String.format("%s (id: %s; kind: %s)",
"[aServiceProvider.description /]",
identifier,
"[aServiceProvider.title /]");
[if (aServiceProvider.publisher.oclIsUndefined())]
Publisher publisher = null;
[else]
Publisher publisher = new Publisher("[aServiceProvider.publisher.title /]", "[aServiceProvider.publisher.identifier /]");
[/if]
Map<String, Object> parameterMap = new HashMap<String, Object>();
[for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(lineSeparator())]
parameterMap.put("[instanceCompositeID /]", serviceProviderInfo.[instanceCompositeID /]);
[/for]
final ServiceProvider aServiceProvider = [javaClassNameForFactory(aServiceProvider) /].createServiceProvider(basePath, title, description, publisher, parameterMap);
if (!contains[aServiceProvider.javaName(true)/]([for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')]serviceProviderInfo.[instanceCompositeID /][/for])) {
ServiceProvider aServiceProvider = create[aServiceProvider.javaName(true)/](serviceProviderInfo);
register[aServiceProvider.javaName(true)/](aServiceProvider, [for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')]serviceProviderInfo.[instanceCompositeID /][/for]);
}
}
Expand All @@ -351,3 +363,12 @@ public class [javaClassNameForSingleton(aServiceProviderCatalog) /]

[/file]
[/template]









Expand Up @@ -57,8 +57,8 @@ package [javaClassPackageName(aServiceProvider) /];
// [/protected]
public class [javaClassName(aServiceProvider) /] {
public String name;
[for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(';'.concat(lineSeparator()))]
public String [instanceCompositeID /];
[for (instanceCompositeID: String | instanceCompositeID(aServiceProvider))]
public String [instanceCompositeID/];
[/for]

// [protected ('class_attributes')]
Expand Down

0 comments on commit 5c2b0d3

Please sign in to comment.