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