You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2015/09/29 17:30:41 UTC
zest-java git commit: library/restlet: minor enhancements
Repository: zest-java
Updated Branches:
refs/heads/develop 6b7650a91 -> 7d1eccbfd
library/restlet: minor enhancements
- allow usage without an authenticated user
- add utility method to create ZestEntityRestlet instances
- add ZestServerServlet for easy deployment using the http library
- minor assembly fixes
- remove unused imports
- some typo fixes
Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/7d1eccbf
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/7d1eccbf
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/7d1eccbf
Branch: refs/heads/develop
Commit: 7d1eccbfd5d2c11de94daf155a9ce2fde76d8aec
Parents: 6b7650a
Author: Paul Merlin <pa...@apache.org>
Authored: Tue Sep 29 17:30:26 2015 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Tue Sep 29 17:30:26 2015 +0200
----------------------------------------------------------------------
.../apache/zest/library/restlet/RestLink.java | 1 -
.../zest/library/restlet/ZestEntityRestlet.java | 52 ++++++++++++++------
.../zest/library/restlet/ZestServerServlet.java | 50 +++++++++++++++++++
.../restlet/assembly/CrudServiceAssembler.java | 4 +-
.../RestletCrudConnectivityAssembler.java | 30 ++++++-----
.../assembly/connectivity/RestModule.java | 4 +-
.../restlet/assembly/domain/CrudModule.java | 4 +-
.../restlet/assembly/domain/DomainLayer.java | 3 +-
.../restlet/resource/CreationResource.java | 4 +-
.../resource/DefaultResourceFactoryImpl.java | 2 +-
.../restlet/resource/EntryPointResource.java | 2 +-
...org.restlet.engine.converter.ConverterHelper | 2 +-
12 files changed, 119 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/RestLink.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/RestLink.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/RestLink.java
index 4dc03ce..5d9a632 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/RestLink.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/RestLink.java
@@ -20,7 +20,6 @@
package org.apache.zest.library.restlet;
-import org.apache.zest.api.common.Optional;
import org.apache.zest.api.property.Property;
public interface RestLink extends HasDescription
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
index 94efac3..f96e736 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestEntityRestlet.java
@@ -15,30 +15,30 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-
package org.apache.zest.library.restlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
+
import org.apache.zest.api.common.Optional;
import org.apache.zest.api.entity.EntityComposite;
import org.apache.zest.api.entity.Identity;
import org.apache.zest.api.injection.scope.Service;
import org.apache.zest.api.injection.scope.Structure;
import org.apache.zest.api.injection.scope.Uses;
+import org.apache.zest.api.structure.Module;
import org.apache.zest.api.unitofwork.NoSuchEntityException;
import org.apache.zest.api.unitofwork.UnitOfWork;
import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
-import org.apache.zest.api.usecase.Usecase;
import org.apache.zest.api.usecase.UsecaseBuilder;
import org.apache.zest.api.value.ValueBuilder;
import org.apache.zest.api.value.ValueBuilderFactory;
import org.apache.zest.library.restlet.metainfo.UserIdentity;
import org.apache.zest.library.restlet.repository.RepositoryLocator;
+import org.apache.zest.library.restlet.resource.DefaultResourceFactoryImpl;
import org.apache.zest.library.restlet.resource.NotPresentException;
import org.apache.zest.library.restlet.resource.ResourceFactory;
import org.apache.zest.library.restlet.resource.ServerResource;
@@ -59,6 +59,29 @@ import org.restlet.security.User;
public class ZestEntityRestlet<T extends Identity> extends Restlet
{
+ /**
+ * Creates a new ZestEntityRestlet instance for the given resource and entity classes.
+ * <p>
+ * This utility method should be used in your org.restlet.Application to create routes.
+ *
+ * @param <K> Parameterized type of the resource
+ * @param <T> Parameterized type of the entity
+ * @param module Module to use for object instanciation
+ * @param router Restlet Router
+ * @param resourceClass Resource class
+ * @param entityClass Entity class
+ *
+ * @return The ZestEntityRestlet instance
+ */
+ public static <K extends Identity, T extends ServerResource<K>> Restlet newInstance(
+ Module module, Router router, Class<T> resourceClass, Class<K> entityClass
+ )
+ {
+ @SuppressWarnings( "unchecked" )
+ ResourceFactory<K, T> factory = module.newObject( DefaultResourceFactoryImpl.class, resourceClass, router );
+ return module.newObject( ZestEntityRestlet.class, factory, router, entityClass, new ZestConverter( module ) );
+ }
+
@Structure
private ValueBuilderFactory vbf;
@@ -253,18 +276,19 @@ public class ZestEntityRestlet<T extends Identity> extends Restlet
private UnitOfWork createUnitOfWork( Request request )
{
+ UsecaseBuilder usecaseBuilder = UsecaseBuilder.buildUsecase( request.getResourceRef().getIdentifier( true ) );
User user = request.getClientInfo().getUser();
- UserIdentity userIdentity = new UserIdentity( user.getIdentifier(),
- user.getName(),
- user.getEmail(),
- user.getFirstName(),
- user.getLastName()
- );
- Usecase usecase = UsecaseBuilder
- .buildUsecase( request.getResourceRef().getIdentifier( true ) )
- .withMetaInfo( userIdentity )
- .newUsecase();
- return uowf.newUnitOfWork( usecase );
+ if( user != null )
+ {
+ UserIdentity userIdentity = new UserIdentity( user.getIdentifier(),
+ user.getName(),
+ user.getEmail(),
+ user.getFirstName(),
+ user.getLastName()
+ );
+ usecaseBuilder.withMetaInfo( userIdentity );
+ }
+ return uowf.newUnitOfWork( usecaseBuilder.newUsecase() );
}
private <K> K convertToObject( Class<K> type, Request request )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestServerServlet.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestServerServlet.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestServerServlet.java
new file mode 100644
index 0000000..2fb77c0
--- /dev/null
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/ZestServerServlet.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.zest.library.restlet;
+
+import javax.servlet.Servlet;
+
+import org.apache.zest.api.injection.scope.Structure;
+import org.apache.zest.api.mixin.Mixins;
+import org.apache.zest.api.structure.Module;
+import org.restlet.Context;
+import org.restlet.ext.servlet.ServerServlet;
+
+/**
+ * Restlet ServerServlet backed by a org.restlet.Application object.
+ */
+@Mixins( ZestServerServlet.Mixin.class )
+public interface ZestServerServlet
+ extends Servlet
+{
+ class Mixin
+ extends ServerServlet
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Structure
+ private Module module;
+
+ @Override
+ protected org.restlet.Application createApplication( Context parentContext )
+ {
+ return module.newObject( org.restlet.Application.class, parentContext.createChildContext() );
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/CrudServiceAssembler.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/CrudServiceAssembler.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/CrudServiceAssembler.java
index 1cfe412..8e88ef8 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/CrudServiceAssembler.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/CrudServiceAssembler.java
@@ -26,6 +26,7 @@ import org.apache.zest.bootstrap.ModuleAssembly;
import org.apache.zest.library.restlet.identity.IdentityManager;
import org.apache.zest.library.restlet.identity.IdentityMappingConfiguration;
import org.apache.zest.library.restlet.repository.RepositoryLocator;
+import org.apache.zest.spi.uuid.UuidIdentityGeneratorService;
public class CrudServiceAssembler
implements Assembler
@@ -34,7 +35,8 @@ public class CrudServiceAssembler
public void assemble( ModuleAssembly module )
throws AssemblyException
{
- module.entities( IdentityMappingConfiguration.class ).visibleIn( Visibility.module );
+ module.services( UuidIdentityGeneratorService.class );
+ module.entities( IdentityMappingConfiguration.class );
module.services( IdentityManager.class ).visibleIn( Visibility.application ).instantiateOnStartup();
module.services( RepositoryLocator.class ).visibleIn( Visibility.application );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/RestletCrudConnectivityAssembler.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/RestletCrudConnectivityAssembler.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/RestletCrudConnectivityAssembler.java
index faa607c..7bba71d 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/RestletCrudConnectivityAssembler.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/RestletCrudConnectivityAssembler.java
@@ -15,10 +15,10 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
package org.apache.zest.library.restlet.assembly;
+import org.apache.zest.api.common.Visibility;
import org.apache.zest.bootstrap.Assembler;
import org.apache.zest.bootstrap.AssemblyException;
import org.apache.zest.bootstrap.ModuleAssembly;
@@ -46,16 +46,24 @@ public class RestletCrudConnectivityAssembler
public void assemble( ModuleAssembly module )
throws AssemblyException
{
- module.values( EntryPointResource.class );
- module.values( EntityListResource.class );
- module.values( EntityResource.class );
- module.values( CreationResource.class );
- module.values( Command.class, FormField.class, RestForm.class, RestLink.class, EntityList.class, EntityRef.class );
- module.objects( DefaultResourceFactoryImpl.class );
- module.objects( JsonRepresentation.class );
- module.objects( FormRepresentation.class );
- module.objects( ZestEntityRestlet.class );
- module.services( ResourceBuilder.class );
+ module.values( EntryPointResource.class,
+ EntityListResource.class,
+ EntityResource.class,
+ CreationResource.class )
+ .visibleIn( Visibility.layer );
+ module.values( Command.class,
+ FormField.class,
+ RestForm.class,
+ RestLink.class,
+ EntityList.class,
+ EntityRef.class )
+ .visibleIn( Visibility.layer );
+ module.objects( DefaultResourceFactoryImpl.class,
+ JsonRepresentation.class,
+ FormRepresentation.class,
+ ZestEntityRestlet.class )
+ .visibleIn( Visibility.layer );
+ module.services( ResourceBuilder.class ).visibleIn( Visibility.layer );
new JacksonValueSerializationAssembler().assemble( module );
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/connectivity/RestModule.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/connectivity/RestModule.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/connectivity/RestModule.java
index 12f6201..1d77e07 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/connectivity/RestModule.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/connectivity/RestModule.java
@@ -15,9 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-
package org.apache.zest.library.restlet.assembly.connectivity;
import org.apache.zest.bootstrap.AssemblyException;
@@ -30,7 +28,7 @@ import org.apache.zest.library.restlet.resource.EntryPoint;
public class RestModule
implements ModuleAssembler
{
- public static String NAME;
+ public static final String NAME = "REST Module";
@Override
public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/CrudModule.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/CrudModule.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/CrudModule.java
index acac756..8520e9d 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/CrudModule.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/CrudModule.java
@@ -15,9 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-
package org.apache.zest.library.restlet.assembly.domain;
import org.apache.zest.bootstrap.AssemblyException;
@@ -29,6 +27,8 @@ import org.apache.zest.library.restlet.assembly.CrudServiceAssembler;
public class CrudModule
implements ModuleAssembler
{
+ public static final String NAME = "CRUD Module";
+
@Override
public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
throws AssemblyException
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/DomainLayer.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/DomainLayer.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/DomainLayer.java
index fc0ee3d..b94b0ab 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/DomainLayer.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/assembly/domain/DomainLayer.java
@@ -15,9 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-
package org.apache.zest.library.restlet.assembly.domain;
import java.util.function.Function;
@@ -37,6 +35,7 @@ public class DomainLayer extends LayeredLayerAssembler
public LayerAssembly assemble( LayerAssembly layer )
throws AssemblyException
{
+ createModule( layer, CrudModule.class );
return layer;
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
index 5591793..8786868 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/CreationResource.java
@@ -37,10 +37,10 @@ import org.apache.zest.library.restlet.identity.IdentityManager;
import org.apache.zest.library.restlet.repository.RepositoryLocator;
import org.restlet.data.Method;
-@Mixins( CreationResource.CreateHostMixin.class )
+@Mixins( CreationResource.Mixin.class )
public interface CreationResource<T extends Identity> extends ServerResource<T>
{
- abstract class CreateHostMixin<T extends Identity>
+ abstract class Mixin<T extends Identity>
implements CreationResource<T>
{
@Structure
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
index af6f07e..944cd41 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/DefaultResourceFactoryImpl.java
@@ -86,7 +86,7 @@ public class DefaultResourceFactoryImpl<K extends Identity, T extends ServerReso
Object id = attributes.get( "id" );
if( id == null )
{
- throw new IllegalArgumentException( resourceType.getName() + " implements Identity and must have an {id} attribute in the path templatee." );
+ throw new IllegalArgumentException( resourceType.getName() + " implements Identity and must have an {id} attribute in the path template." );
}
return id;
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
index 3a3667b..57a855e 100644
--- a/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
+++ b/libraries/restlet/src/main/java/org/apache/zest/library/restlet/resource/EntryPointResource.java
@@ -72,7 +72,7 @@ public interface EntryPointResource extends ServerResource<EntryPoint>
TemplateRoute route = (TemplateRoute) r;
Template template = route.getTemplate();
// Only include patterns that doesn't have variables, and has a proper name.
- if( template.getVariableNames().size() == 0 && route.getName().indexOf( '>' ) == -1 )
+ if( template.getVariableNames().isEmpty() && route.getName().indexOf( '>' ) == -1 )
{
Reference hostRef = parameters.request().get().getOriginalRef();
Reference reference = new Reference( hostRef, template.getPattern() );
http://git-wip-us.apache.org/repos/asf/zest-java/blob/7d1eccbf/libraries/restlet/src/main/resources/META_INF/services/org.restlet.engine.converter.ConverterHelper
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/resources/META_INF/services/org.restlet.engine.converter.ConverterHelper b/libraries/restlet/src/main/resources/META_INF/services/org.restlet.engine.converter.ConverterHelper
index 381cf8c..2673c63 100644
--- a/libraries/restlet/src/main/resources/META_INF/services/org.restlet.engine.converter.ConverterHelper
+++ b/libraries/restlet/src/main/resources/META_INF/services/org.restlet.engine.converter.ConverterHelper
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-org.apache.zest.library.restlet.Qi4jConverter
+org.apache.zest.library.restlet.ZestConverter