http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/HardCodedSecurityRepositoryMixinWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/HardCodedSecurityRepositoryMixinWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/HardCodedSecurityRepositoryMixinWriter.java new file mode 100644 index 0000000..cd4fb34 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/HardCodedSecurityRepositoryMixinWriter.java @@ -0,0 +1,67 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class HardCodedSecurityRepositoryMixinWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".model.security;" ); + pw.println(); + pw.println( + "import java.util.Collections;\n" + + "import java.util.List;\n" + + "import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;\n" + + "\n" + + "public class HardcodedSecurityRepositoryMixin\n" + + " implements SecurityRepository\n" + + "{\n" + + "\n" + + " @Override\n" + + " public boolean verifyPassword( String userName, String password )\n" + + " {\n" + + " if( userName.equals(\"admin\") && password.equals(\"secret\") )" + + " {\n" + + " return true;\n" + + " }\n" + + " if( userName.equals(\"user\") && password.equals(\"123\") )" + + " {\n" + + " return true;\n" + + " }\n" + + " return false;\n" + + " }\n" + + "\n" + + " @UnitOfWorkPropagation\n" + + " public List<String> findRoleNamesOfUser( String name )\n" + + " {\n" + + " if( \"admin\".equals( name ) )\n" + + " {\n" + + " return Collections.singletonList(\"admin\");\n" + + " }\n" + + " return Collections.singletonList(\"user\");\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/model/security/"; + String classname = "HardcodedSecurityRepositoryMixin"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "model/src/main/java/" + packagename + classname + ".java" ) ) ); + } +}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexHtmlWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexHtmlWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexHtmlWriter.java new file mode 100644 index 0000000..01a3be3 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexHtmlWriter.java @@ -0,0 +1,37 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class IndexHtmlWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.println( + String.format( + "<!DOCTYPE html>\n" + + "<html><body>\n" + + "<h1>Welcome to %s</h1>" + + "</body></html>\n" + + "<>\n", projectName ) + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "app/src/main/webapp/index.html" ) ) ); + } +} + http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexingModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexingModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexingModuleWriter.java new file mode 100644 index 0000000..e4f534d --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/IndexingModuleWriter.java @@ -0,0 +1,66 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class IndexingModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.infrastructure;" ); + pw.println(); + pw.println( + "import org.apache.zest.api.common.Visibility;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;\n" + + "import org.apache.zest.index.rdf.assembly.RdfNativeSesameStoreAssembler;\n" + + "import org.apache.zest.library.rdf.repository.NativeConfiguration;\n" + + "\n" + + "public class IndexingModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static final String NAME = \"Indexing Module\";\n" + + " private final ModuleAssembly configModule;\n" + + "\n" + + " public IndexingModule( ModuleAssembly configModule )\n" + + " {\n" + + " this.configModule = configModule;\n" + + " }\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + " module.withDefaultUnitOfWorkFactory();\n" + + "\n" + + " configModule.entities( NativeConfiguration.class ).visibleIn( Visibility.application );\n" + + " new RdfNativeSesameStoreAssembler(Visibility.application, Visibility.module).assemble( module );\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/infrastructure/"; + String classname = "IndexingModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/InfrastructureLayerWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/InfrastructureLayerWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/InfrastructureLayerWriter.java new file mode 100644 index 0000000..d67abd9 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/InfrastructureLayerWriter.java @@ -0,0 +1,71 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class InfrastructureLayerWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.infrastructure;" ); + pw.println(); + pw.println( + "import java.util.function.Function;\n" + + "import org.apache.zest.api.structure.Application;\n" + + "import org.apache.zest.api.structure.Module;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.LayerAssembler;\n" + + "import org.apache.zest.bootstrap.layered.LayeredLayerAssembler;\n" + + "\n" + + "public class InfrastructureLayer extends LayeredLayerAssembler\n" + + " implements LayerAssembler\n" + + "{\n" + + " public static final String NAME = \"Infrastructure Layer\";\n" + + " private final ModuleAssembly configModule;\n" + + " private final Function<Application, Module> typeFinder;\n" + + "\n" + + " public InfrastructureLayer( ModuleAssembly configModule, Function<Application, Module> typeFinder )\n" + + " {\n" + + " this.configModule = configModule;\n" + + " this.typeFinder = typeFinder;\n" + + " }\n" + + "\n" + + " @Override\n" + + " public LayerAssembly assemble( LayerAssembly layer )\n" + + " throws AssemblyException\n" + + " {\n" + + " createModule( layer, FileConfigurationModule.class );\n" + + "\n" + + " new StorageModule( configModule ).assemble( layer, layer.module( StorageModule.NAME ) );\n" + + " new IndexingModule( configModule ).assemble( layer, layer.module( IndexingModule.NAME ) );\n" + + " new SerializationModule( typeFinder ).assemble( layer, layer.module( SerializationModule.NAME ) );\n" + + "\n" + + " return layer;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/infrastructure/"; + String classname = "InfrastructureLayer"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderItemWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderItemWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderItemWriter.java new file mode 100644 index 0000000..94732bd --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderItemWriter.java @@ -0,0 +1,46 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class OrderItemWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".model.orders;" ); + pw.println(); + pw.println("import java.math.BigDecimal;"); + pw.println("import org.apache.zest.api.entity.Identity;"); + pw.println("import org.apache.zest.api.property.Property;"); + pw.println(); + pw.println( + "public interface OrderItem extends Identity\n" + + "{\n" + + " Property<String> partNumber();\n\n" + + " Property<BigDecimal> unitPrice();\n\n" + + " Property<Integer> units();\n\n" + + " Property<BigDecimal> discount();\n\n" + + "}\n"); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/model/orders/"; + String classname = "OrderItem"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "model/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderModuleWriter.java new file mode 100644 index 0000000..c5eed46 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderModuleWriter.java @@ -0,0 +1,65 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class OrderModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.domain;" ); + pw.println(); + pw.println( + "import org.apache.zest.api.common.Visibility;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;"); + pw.println(format("import %s.model.orders.Order;", rootPackage)); + pw.println(format("import %s.model.orders.OrderItem;", rootPackage)); + pw.println(format("import %s.model.orders.Customer;", rootPackage)); + pw.println(); + pw.println( + "public class OrderModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static String NAME;\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + " module.values( /* add value types */ );\n" + + " module.entities( Customer.class, Order.class, OrderItem.class );\n" + + " module.services( /* add services */ )\n" + + " .visibleIn( Visibility.layer )\n" + + " .instantiateOnStartup();\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/domain/"; + String classname = "OrderModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderWriter.java new file mode 100644 index 0000000..8a07d52 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/OrderWriter.java @@ -0,0 +1,51 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class OrderWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".model.orders;" ); + pw.println(); + pw.println("import java.time.ZonedDateTime;"); + pw.println("import org.apache.zest.api.association.Association;"); + pw.println("import org.apache.zest.api.association.ManyAssociation;"); + pw.println("import org.apache.zest.api.common.Optional;"); + pw.println("import org.apache.zest.api.entity.Identity;"); + pw.println("import org.apache.zest.api.property.Property;"); + pw.println(); + pw.println( + "public interface Order extends Identity\n" + + "{\n" + + " Property<String> orderNumber();\n\n" + + " Property<ZonedDateTime> registered();\n\n" + + " @Optional\n" + + " Property<ZonedDateTime> shipped();\n\n" + + " Association<Customer> customer();\n\n" + + " ManyAssociation<OrderItem> items();\n\n" + + "}\n"); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/model/orders/"; + String classname = "Order"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "model/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/RestModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/RestModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/RestModuleWriter.java new file mode 100644 index 0000000..4a80205 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/RestModuleWriter.java @@ -0,0 +1,66 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class RestModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.connectivity;" ); + pw.println(); + pw.println(format("import %s.rest.security.SimpleEnroler;", rootPackage)); + pw.println(format("import %s.rest.security.SimpleVerifier;", rootPackage)); + pw.println( + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;\n" + + "import org.apache.zest.library.restlet.assembly.RestletCrudConnectivityAssembler;\n" + + "import org.apache.zest.library.restlet.resource.EntryPoint;\n" + + "\n" + + "public class RestModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static String NAME;\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + " module.withDefaultUnitOfWorkFactory();\n" + + "\n" + + " module.objects( SimpleVerifier.class, SimpleEnroler.class);\n" + + "\n" + + " new RestletCrudConnectivityAssembler().assemble( module );\n" + + " module.values( /* add value types */ );\n" + + " module.services( /* add services */ );\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/connectivity/"; + String classname = "RestModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityModuleWriter.java new file mode 100644 index 0000000..7150df8 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityModuleWriter.java @@ -0,0 +1,67 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class SecurityModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.domain;" ); + pw.println(); + pw.println( + "import org.apache.zest.api.common.Visibility;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;"); + pw.println(format("import %s.model.orders.Order;", rootPackage)); + pw.println(format("import %s.model.orders.OrderItem;", rootPackage)); + pw.println(format("import %s.model.orders.Customer;", rootPackage)); + pw.println(format("import %s.model.security.SecurityRepository;", rootPackage)); + pw.println(format("import %s.model.security.HardcodedSecurityRepositoryMixin;", rootPackage)); + pw.println(); + pw.println( + "public class SecurityModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static String NAME;\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + " module.services( SecurityRepository.class )\n" + + " .withMixins( HardcodedSecurityRepositoryMixin.class )\n" + + " .visibleIn( Visibility.application )\n" + + " .instantiateOnStartup();\n" + + "\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/domain/"; + String classname = "SecurityModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityRepositoryWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityRepositoryWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityRepositoryWriter.java new file mode 100644 index 0000000..d0ece25 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SecurityRepositoryWriter.java @@ -0,0 +1,51 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class SecurityRepositoryWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".model.security;" ); + pw.println(); + pw.println( + "import java.util.List;\n" + + "import org.apache.zest.api.concern.Concerns;\n" + + "import org.apache.zest.api.unitofwork.concern.UnitOfWorkConcern;\n" + + "import org.apache.zest.api.unitofwork.concern.UnitOfWorkPropagation;\n" + + "\n" + + "@Concerns( UnitOfWorkConcern.class )\n" + + "public interface SecurityRepository\n" + + "{\n" + + " @UnitOfWorkPropagation\n" + + " boolean verifyPassword( String user, String password );\n" + + "\n" + + " @UnitOfWorkPropagation\n" + + " List<String> findRoleNamesOfUser( String name );\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/model/security/"; + String classname = "SecurityRepository"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "model/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SerializationModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SerializationModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SerializationModuleWriter.java new file mode 100644 index 0000000..322f920 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SerializationModuleWriter.java @@ -0,0 +1,70 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class SerializationModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.infrastructure;" ); + pw.println(); + pw.println( + "import java.util.function.Function;\n" + + "import org.apache.zest.api.common.Visibility;\n" + + "import org.apache.zest.api.structure.Application;\n" + + "import org.apache.zest.api.structure.Module;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;\n" + + "import org.apache.zest.spi.uuid.UuidIdentityGeneratorService;\n" + + "import org.apache.zest.valueserialization.jackson.JacksonValueSerializationAssembler;\n" + + "\n" + + "public class SerializationModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static final String NAME = \"Serialization Module\";\n" + + " private final Function<Application, Module> typeFinder;\n" + + "\n" + + " public SerializationModule( Function<Application, Module> typeFinder )\n" + + " {\n" + + " this.typeFinder = typeFinder;\n" + + " }\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + " new JacksonValueSerializationAssembler()\n" + + " .visibleIn( Visibility.application )\n" + + " .withValuesModuleFinder( typeFinder )\n" + + " .assemble( module );\n" + + " module.services( UuidIdentityGeneratorService.class ).visibleIn( Visibility.layer );\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/infrastructure/"; + String classname = "SerializationModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SettingsWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SettingsWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SettingsWriter.java new file mode 100644 index 0000000..080f5e2 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SettingsWriter.java @@ -0,0 +1,55 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class SettingsWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.println( + String.format( + "\n" + + "include 'app',\n" + + " 'bootstrap',\n" + + " 'model',\n" + + " 'rest'\n" + + "\n" + + "rootProject.name = \"%s\"\n" + + "\n" + + "validateProject(rootProject, \"\")\n" + + "\n" + + "def validateProject(project, parentName)\n" + + "{\n" + + " assert project.projectDir.isDirectory()\n" + + " if( new File(\"$project.projectDir/src/main/java\").exists() )\n" + + " {\n" + + " assert project.buildFile.isFile()\n" + + " }\n" + + " if( parentName.length() > 0 )\n" + + " println \"Project: \" + project.name\n" + + " project.children.each { child ->\n" + + " validateProject(child, project.name)\n" + + " }\n" + + "}\n" + + "\n", projectName + )); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "settings.gradle" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleEnrolerWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleEnrolerWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleEnrolerWriter.java new file mode 100644 index 0000000..58e9ebd --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleEnrolerWriter.java @@ -0,0 +1,68 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class SimpleEnrolerWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".rest.security;" ); + pw.println(); + pw.println( + "import java.util.ArrayList;\n" + + "import java.util.List;\n" + + "import org.apache.zest.api.injection.scope.Service;\n" + + "import org.apache.zest.api.injection.scope.Uses;\n" + + "import org.restlet.Application;\n" + + "import org.restlet.data.ClientInfo;\n" + + "import org.restlet.security.Enroler;\n" + + "import org.restlet.security.Role;" ); + pw.println( format( "import %s.model.security.SecurityRepository;\n", rootPackage )); + pw.println(); + pw.println( + "public class SimpleEnroler\n" + + " implements Enroler\n" + + "{\n" + + " @Service\n" + + " private SecurityRepository repository;\n" + + "\n" + + " @Uses\n" + + " private Application application;\n" + + "\n" + + " @Override\n" + + " public void enrole( ClientInfo clientInfo )\n" + + " {\n" + + " org.restlet.security.User user = clientInfo.getUser();\n" + + " String name = user.getName();\n" + + " List<String> roleList = repository.findRoleNamesOfUser( name );\n" + + " List<Role> restletRoles = new ArrayList<>();\n" + + " roleList.stream().map( roleName -> Role.get( application, roleName ) );\n" + + " clientInfo.setRoles( restletRoles );\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/rest/security/"; + String classname = "SimpleEnroler"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "rest/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleVerifierWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleVerifierWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleVerifierWriter.java new file mode 100644 index 0000000..106a67b --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/SimpleVerifierWriter.java @@ -0,0 +1,62 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +import static java.lang.String.format; + +public class SimpleVerifierWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".rest.security;" ); + pw.println(); + pw.println( + "import org.apache.zest.api.injection.scope.Service;\n" + + "import org.restlet.security.SecretVerifier;\n" + + "import org.restlet.security.Verifier;\n" + + format( "import %s.model.security.SecurityRepository;\n", rootPackage ) + + "\n" + + "public class SimpleVerifier extends SecretVerifier\n" + + " implements Verifier\n" + + "{\n" + + " @Service\n" + + " private SecurityRepository repository;\n" + + "\n" + + " @Override\n" + + " public int verify( String user, char[] secret )\n" + + " {\n" + + " if( user == null || secret == null )\n" + + " {\n" + + " return RESULT_UNKNOWN;\n" + + " }\n" + + " if( repository.verifyPassword( user, String.valueOf( secret ) ) )\n" + + " {\n" + + " return RESULT_VALID;\n" + + " }\n" + + " return RESULT_INVALID;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/rest/security/"; + String classname = "SimpleVerifier"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "rest/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/StorageModuleWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/StorageModuleWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/StorageModuleWriter.java new file mode 100644 index 0000000..3b673f9 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/StorageModuleWriter.java @@ -0,0 +1,67 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class StorageModuleWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.print( "package " ); + pw.print( properties.get( "root.package" ) ); + pw.println( ".bootstrap.infrastructure;" ); + pw.println(); + pw.println( + "import org.apache.zest.api.common.Visibility;\n" + + "import org.apache.zest.bootstrap.AssemblyException;\n" + + "import org.apache.zest.bootstrap.LayerAssembly;\n" + + "import org.apache.zest.bootstrap.ModuleAssembly;\n" + + "import org.apache.zest.bootstrap.layered.ModuleAssembler;\n" + + "import org.apache.zest.entitystore.file.assembly.FileEntityStoreAssembler;\n" + + "\n" + + "public class StorageModule\n" + + " implements ModuleAssembler\n" + + "{\n" + + " public static final String NAME = \"Storage Module\";\n" + + " private final ModuleAssembly configModule;\n" + + "\n" + + " public StorageModule( ModuleAssembly configModule )\n" + + " {\n" + + " this.configModule = configModule;\n" + + " }\n" + + "\n" + + " @Override\n" + + " public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )\n" + + " throws AssemblyException\n" + + " {\n" + + "\n" + + " new FileEntityStoreAssembler()\n" + + " .visibleIn( Visibility.application )\n" + + " .withConfig( configModule, Visibility.application )\n" + + " .identifiedBy( \"filestore\" )\n" + + " .assemble( module );\n" + + " return module;\n" + + " }\n" + + "}\n" + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + String packagename = properties.get( "root.package" ).replaceAll( "\\.", "/" ) + "/bootstrap/infrastructure/"; + String classname = "StorageModule"; + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "bootstrap/src/main/java/" + packagename + classname + ".java" ) ) ); + } +} http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/WebXmlWriter.java ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/WebXmlWriter.java b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/WebXmlWriter.java new file mode 100644 index 0000000..4040526 --- /dev/null +++ b/tools/shell/src/main/java/org/apache/zest/tools/shell/create/project/restapp/WebXmlWriter.java @@ -0,0 +1,65 @@ +package org.apache.zest.tools.shell.create.project.restapp; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class WebXmlWriter +{ + + public void writeClass( Map<String, String> properties ) + throws IOException + { + String rootPackage = properties.get( "root.package" ); + String projectName = properties.get( "project.name" ); + try (PrintWriter pw = createPrinter( properties )) + { + pw.println( + String.format( + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + + "\n" + + "<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n" + + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + + " xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\"\n" + + " version=\"3.0\">\n" + + "\n" + + " <servlet>\n" + + " <servlet-name>zestrest</servlet-name>\n" + + " <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>\n" + + " <init-param>\n" + + " <param-name>org.sensorsink.kooda.mode</param-name>\n" + + " <param-value>production</param-value>\n" + + " </init-param>\n" + + " <init-param>\n" + + " <!-- Application class name -->\n" + + " <param-name>org.restlet.application</param-name>\n" + + " <param-value>%s</param-value>\n" + + " </init-param>\n" + + " <init-param>\n" + + " <!-- Protocols to be bound to-->\n" + + " <param-name>org.restlet.clients</param-name>\n" + + " <param-value>HTTP HTTPS</param-value>\n" + + " </init-param>\n" + + " <load-on-startup>1</load-on-startup>\n" + + " </servlet>\n" + + "\n" + + " <servlet-mapping>\n" + + " <servlet-name>zestrest</servlet-name>\n" + + " <url-pattern>/api/*</url-pattern>\n" + + " </servlet-mapping>\n" + + "\n" + + "</web-app>\n", rootPackage + ".app." + projectName ) + ); + } + } + + private PrintWriter createPrinter( Map<String, String> properties ) + throws IOException + { + File projectDir = new File( properties.get( "project.dir" ) ); + return new PrintWriter( new FileWriter( new File( projectDir, "app/src/main/webapp/WEB-INF/web.xml" ) ) ); + } +} + http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/resources/templates/default/project.properties ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/resources/templates/default/project.properties b/tools/shell/src/main/resources/templates/default/project.properties new file mode 100644 index 0000000..a779d4f --- /dev/null +++ b/tools/shell/src/main/resources/templates/default/project.properties @@ -0,0 +1,15 @@ +# 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. + http://git-wip-us.apache.org/repos/asf/zest-java/blob/45624ba4/tools/shell/src/main/resources/templates/restapp/project.properties ---------------------------------------------------------------------- diff --git a/tools/shell/src/main/resources/templates/restapp/project.properties b/tools/shell/src/main/resources/templates/restapp/project.properties new file mode 100644 index 0000000..7ca2d3a --- /dev/null +++ b/tools/shell/src/main/resources/templates/restapp/project.properties @@ -0,0 +1,18 @@ +# 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. + +creator.class=org.apache.zest.tools.shell.create.project.RestProjectCreator + +template.dir=etc/templates/restproject/files \ No newline at end of file
