You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
A core framework for rapid-application development in a standards-based environment. Plugins / incremental project enhancement for Java EE, and more.
Name | Organization | Role | Hometown (Time zone) |
---|---|---|---|
Lincoln Baxter III | JBoss, by Red Hat | Project Lead | Charlotte, NC, USA (UTC-05) |
Mike Brock | JBoss, by Red Hat | Scripting & Errai Integration Lead | Toronto, ON (UTC-05) |
Koen Aers | JBoss, by Red Hat | JBoss Tools Integation Lead | Antwerp, BE (UTC+01) |
Got an idea? Want to get your feet wet? Do some Forgestorming: http://bit.ly/forgestorm - def: forgestorm (v.) [for-ge-st-orm] - The act of brainstorming when applied to Forge
watch mayweather vs ortiz online
|
git clone git@github.com:{your user}/{your forge repo}.git
git branch SEAMFORGE-XX git checkout SEAMFORGE-XX
git add -A git commit -m "Implemented SEAMFORGE-XX"
git rebase -i HEAD~5Change 'pick' to 's' for each commit you wish to squash upwards. (If you do not change a line, it will not be modified.)
1 pick ade2b1a Implemented SEAMFORGE-XX 2 s c3ae0a2 almost done 3 s c863bfb did more work 4 s af793ae Started working on SEAMFORGE-XX 5 pick 368bbb9 RepositoryLookup falls back to Central by defaultOnce you are done, your commits should look like this:
1 ade2b1a Implemented SEAMFORGE-XX 2 368bbb9 RepositoryLookup falls back to Central by default
git push origin SEAMFORGE-XX
http://github.com/{your user}/{your forge repo}/tree/{SEAMFORGE-XX}
Workflow->
Link Pull Request
1 This step only needs to occur once:
git remote add upstream git://github.com/forge/core.git2 Pull the changes from upstream and merge them into your current branch:
git pull upstream master
Once you have checked out and built the sources, you can debug Forge by taking the following steps:
cd forge/dist/
mvnDebug exec:java
(status: draft) - This plan is still being defined.
Version | Time frame | Focus |
---|---|---|
1.0.0.Beta2 or 1.0.0.CR1 (In Progress) | ~ September |
|
1.0.0.Beta1 (In Progress) | ~ August |
|
1.0.0.Alpha4 "Birthday" Released | June 9, 2011 |
|
1.0.0.Alpha3 "Angry Kittens" Released | ~ March 30th |
|
1.0.0.Alpha2 "Angry Kitten" (Released) | ~ February |
|
1.0.0.Alpha1 "Angry Kitten" Released | ~ November |
|
~ October |
|
|
~ September |
|
|
~ August |
|
(To be continued as more ideas roll in.)
@Option(default="org.${project.name}") String defaultPackage
javadoc javax.servlet.Servlet
cd src/main/java...
mark java...
show marks (marks)...
cd/go java
For faster installation & bootstrap:
mvn org.jboss.seam:seamforge
would result in downloading the forge dist, executing it.
[no project] /home/lb3/Desktop $ new-project [The name of the new project (java.lang.String)]: example Use [/home/lb3/Desktop/example] as project directory? [Y/n] y Please enter your base package [e.g: "com.example.project"] com.example ***SUCCESS*** Created project [example] in new working directory [/home/lb3/Desktop/example] [example] /home/lb3/Desktop/example $
Maven Artifact:
<dependency> <groupId>org.jboss.seam.forge</groupId> <artifactId>forge-shell-api</artifactId> <version>${project.version}</version> </dependency>
example of how the plugin would be invoked from the shell: displays help information about the system, plugins, and commands
[no project] /home/lb3/Desktop $ help
/** * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ @Named("help") @Help("Displays help text for specified plugins & commands.") public class HelpPlugin implements Plugin { @Inject PluginRegistry registry; @Inject Shell shell; @DefaultCommand(help = "Get help about specific commands") public void help(@Option final String... commands) { if ((commands == null) || (commands.length == 0)) { shell.println("Welcome to Encore!"); } else { shell.println("[" + commands[0] + "] " + registry.getPlugins().get(commands[0]).getHelp()); } } }
Maven Artifact:
<dependency> <groupId>org.jboss.seam.forge</groupId> <artifactId>forge-parser-java</artifactId> <version>${project.version}</version> </dependency>
Needs code formatting from Eclipse JDT.
Example usage via a JUnit Test:
public class JavaClassTest { private InputStream stream; private JavaClass javaClass; @Before public void reset() { stream = JavaClassTest.class .getResourceAsStream("/org/jboss/encore/grammar/java/MockClassFile.java"); javaClass = new JavaClass(stream); } @Test public void testParse() throws Exception { List<Import> imports = javaClass.getImports(); assertEquals(URL.class.getName(), imports.get(0).getName()); } @Test public void testAddMethodFromString() throws Exception { javaClass.addMethod("public URL rewriteURL(String pattern, String replacement) { return null; }") .setPackagePrivate().applyChanges(); List<Method> methods = javaClass.getMethods(); assertEquals(3, methods.size()); assertEquals("URL", methods.get(2).getReturnType()); assertEquals("rewriteURL", methods.get(2).getName()); String body = methods.get(2).getBody(); assertEquals("return null;".replaceAll("\\s+", ""), body.replaceAll("\\s+", "")); } @Test public void testRemoveMethod() throws Exception { // TODO Removing methods needs to work List<Method> methods = javaClass.getMethods(); javaClass.removeMethod(methods.get(0)).applyChanges(); methods = javaClass.getMethods(); assertEquals(1, methods.size()); }
Maven Dependency:
<dependency> <groupId>org.jboss.seam.forge</groupId> <artifactId>forge-test-harness</artifactId> <version>${project.version}</version> </dependency>
Example usage: (Any shell operation can be performed, using the default shell implementation. A new base-project is created, and the shell is re-initialized for each test method invocation.)
@RunWith(Arquillian.class) public class ShellImplTest extends AbstractShellTest { @Test public void testPromptBoolean() throws Exception { queueInputLines("y"); assertTrue(getShell().promptBoolean("Would you like cake?")); queueInputLines("yes"); assertTrue(getShell().promptBoolean("Would you like cake?")); queueInputLines("n"); assertFalse(getShell().promptBoolean("Would you like cake?")); queueInputLines("no"); assertFalse(getShell().promptBoolean("Would you like cake?")); } }
--pretend: causes all file modifications to be performed in a parallel directory structure, after which creating a Diff to be displayed to the user / consumed by tooling; any parallel files created are to be removed after execution.
file:
plugin.scaffold.domainPackage="~.domain2.entities" plugin.scaffold.autoUpdate=false plugin.scaffold.viewPath="~/faces/views/"
There will certainly be situations where some plugins must operate before others. A CDI event bus will be in place to ensure ordering of said events, and allowing for propagation of file changes throughout the plugin listeners, in a manner that prevents cyclic operations.
Lightweight and powerful templating http://www.pastie.org/1146629
http://www.pastie.org/1146678