Skip to content

Commit e82b463

Browse files
committed
EQX-211: Added Stripes support to AMP.
1 parent 34e47c1 commit e82b463

File tree

15 files changed

+519
-28
lines changed

15 files changed

+519
-28
lines changed

plugins/appfuse-maven-plugin/build.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@
8080
<create-gen-basic archetype="appfuse-light-spring-security" name="light-spring-security"/>
8181
</target>
8282

83+
<target name="test-stripes-light" description="tests plugin with stripes light archetype">
84+
<create-gen-basic archetype="appfuse-light-stripes" name="light-stripes"/>
85+
</target>
86+
8387
<target name="test-struts-light" description="tests plugin with struts light archetype">
8488
<create-gen-basic archetype="appfuse-light-struts" name="light-struts"/>
8589
</target>
@@ -95,7 +99,10 @@
9599
<target name="test-light" description="Runs all light archetype tests using Ant">
96100
<antcall target="test-jsf-light"/>
97101
<antcall target="test-spring-light"/>
102+
<antcall target="test-spring-freemarker-light"/>
103+
<antcall target="test-spring-security-light"/>
98104
<antcall target="test-struts-light"/>
105+
<antcall target="test-stripes-light"/>
99106
<antcall target="test-tapestry-light"/>
100107
</target>
101108

plugins/appfuse-maven-plugin/src/main/java/org/appfuse/tool/AppFuseExporter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,18 @@ private void generateWeb() {
175175
// validation
176176
configureExporter("appfuse/web/struts/model-validation.ftl", "src/main/resources/{basepkg-name}/model/{class-name}-validation.xml").start();
177177
configureExporter("appfuse/web/struts/action-validation.ftl", "src/main/resources/{basepkg-name}/webapp/action/{class-name}Action-validation.xml").start();
178+
} else if (webFramework.equalsIgnoreCase("stripes")) {
179+
// tests
180+
configureExporter("appfuse/web/stripes/list-action-test.ftl", "src/test/java/{basepkg-name}/webapp/action/{class-name}ListBeanTest.java").start();
181+
configureExporter("appfuse/web/stripes/form-action-test.ftl", "src/test/java/{basepkg-name}/webapp/action/{class-name}FormBeanTest.java").start();
182+
183+
// actions
184+
configureExporter("appfuse/web/stripes/list-action.ftl", "src/main/java/{basepkg-name}/webapp/action/{class-name}ListBean.java").start();
185+
configureExporter("appfuse/web/stripes/form-action.ftl", "src/main/java/{basepkg-name}/webapp/action/{class-name}FormBean.java").start();
186+
187+
// views
188+
configureExporter("appfuse/web/stripes/list-view.ftl", "src/main/webapp/{class-name}List.jsp").start();
189+
configureExporter("appfuse/web/stripes/form-view.ftl", "src/main/webapp/{class-name}Form.jsp").start();
178190
} else if (webFramework.equalsIgnoreCase("tapestry")) {
179191
// tests
180192
configureExporter("appfuse/web/tapestry/list-test.ftl", "src/test/java/{basepkg-name}/webapp/pages/{class-name}ListTest.java").start();
@@ -207,9 +219,9 @@ private void generateWeb() {
207219

208220
// i18n
209221
configureExporter("appfuse/web/ApplicationResources.ftl", "src/main/resources/{class-name}-ApplicationResources.properties").start();
210-
222+
211223
// canoo tests
212-
if (!webFramework.equals("spring-security") && !webFramework.equalsIgnoreCase("spring-freemarker")) {
224+
if (!webFramework.equals("spring-security") && !webFramework.equalsIgnoreCase("spring-freemarker") && !webFramework.equalsIgnoreCase("stripes")) {
213225
configureExporter("appfuse/web/" + webFramework + "/web-tests.ftl", "src/test/resources/{class-name}-web-tests.xml").start();
214226
}
215227
// jwebunit tests

plugins/appfuse-maven-plugin/src/main/java/org/appfuse/tool/ArtifactInstaller.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public void execute() {
9696
} else if ("spring-freemarker".equalsIgnoreCase(webFramework)) {
9797
log("Installing Freemarker views...");
9898
installSpringFreemarkerViews(pagesPath);
99+
} else if ("stripes".equalsIgnoreCase(webFramework)) {
100+
log("Installing Stripes views...");
101+
installStripesViews();
99102
} else if ("tapestry".equalsIgnoreCase(webFramework)) {
100103
log("Installing Tapestry views and configuring...");
101104
installTapestryViews();
@@ -275,6 +278,17 @@ private void installSpringFreemarkerViews(String pagesPath) {
275278
copy.execute();
276279
}
277280

281+
private void installStripesViews() {
282+
Copy copy = (Copy) antProject.createTask("copy");
283+
copy.setFile(new File(sourceDirectory + "/src/main/webapp/" + pojoName + "Form.jsp"));
284+
copy.setTofile(new File(destinationDirectory + "/src/main/webapp/" + pojoNameLower + "Form.jsp"));
285+
copy.execute();
286+
287+
copy.setFile(new File(sourceDirectory + "/src/main/webapp/" + pojoName + "List.jsp"));
288+
copy.setTofile(new File(destinationDirectory + "/src/main/webapp/" + pojoNameLower + "List.jsp"));
289+
copy.execute();
290+
}
291+
278292
private void installStrutsViews(String pagesPath) {
279293
Copy copy = (Copy) antProject.createTask("copy");
280294
copy.setFile(new File(sourceDirectory + "/src/main/webapp/WEB-INF/pages/" + pojoName + "Form.jsp"));

plugins/appfuse-maven-plugin/src/main/java/org/appfuse/tool/ArtifactUninstaller.java

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,27 +58,31 @@ public void execute() {
5858
if (project.getPackaging().equalsIgnoreCase("war")) {
5959
removeGeneratedFiles(installedDirectory, "**/webapp/**/" + pojoName + "*.java");
6060

61+
String pagesPath = (isAppFuse()) ? "/src/main/webapp/WEB-INF/pages/" : "/src/main/webapp/";
6162
String webFramework = project.getProperties().getProperty("web.framework");
6263

6364
if ("jsf".equalsIgnoreCase(webFramework)) {
64-
log("Removing JSF views and configuring...");
65+
log("Removing JSF views and configuration...");
6566
removeJSFNavigationAndBeans();
6667
removeJSFViews();
6768
} else if ("struts".equalsIgnoreCase(webFramework)) {
68-
log("Removing Struts views and configuring...");
69+
log("Removing Struts views and configuration...");
6970
// A bean definition for an Action is not used anymore (APF-798)
7071
// installStrutsBeanDefinition();
7172
removeStrutsActionDefinitions();
7273
removeGeneratedFiles(installedDirectory + "/src/main/resources", "**/model/" + pojoName + "*.xml");
7374
removeGeneratedFiles(installedDirectory + "/src/main/resources", "**/webapp/action/" + pojoName + "*.xml");
74-
removeStrutsViews();
75-
} else if ("spring".equalsIgnoreCase(webFramework)) {
76-
log("Removing Spring views and configuring...");
75+
removeStrutsViews(pagesPath);
76+
} else if (webFramework.contains("spring")) {
77+
log("Removing Spring views...");
7778
removeSpringControllerBeanDefinitions();
7879
removeSpringValidation();
79-
removeSpringViews();
80+
removeSpringViews(pagesPath);
81+
} else if ("stripes".equalsIgnoreCase(webFramework)) {
82+
log("Removing Stripes views...");
83+
removeStripesViews();
8084
} else if ("tapestry".equalsIgnoreCase(webFramework)) {
81-
log("Removing Tapestry views and configuring...");
85+
log("Removing Tapestry views...");
8286
removeTapestryViews();
8387
}
8488

@@ -128,15 +132,6 @@ private void removeSampleData() {
128132
parseXMLFile(existingFile, null);
129133
}
130134

131-
/* APF-1105: Changed to use Spring annotations (@Repository, @Service and @Autowired)
132-
private void removeDaoAndManagerBeanDefinitions() {
133-
File generatedFile = new File(installedDirectory + getPathToApplicationContext());
134-
parseXMLFile(generatedFile, pojoName + "Dao");
135-
136-
generatedFile = new File(installedDirectory + getPathToApplicationContext());
137-
parseXMLFile(generatedFile, pojoName + "Manager");
138-
}*/
139-
140135
private void removeiBATISFiles() {
141136
if (project.getProperties().getProperty("dao.framework").equals("ibatis")) {
142137
log("Removing iBATIS SQL Maps...");
@@ -160,10 +155,6 @@ private void removeGenericBeanDefinitions() {
160155
private void removeJSFNavigationAndBeans() {
161156
File generatedFile = new File(installedDirectory + "/src/main/webapp/WEB-INF/faces-config.xml");
162157
parseXMLFile(generatedFile, pojoName + "-nav");
163-
164-
// JSF managed beans configured by Spring annotations in 2.1+
165-
//generatedFile = new File(installedDirectory + "/src/main/webapp/WEB-INF/faces-config.xml");
166-
//parseXMLFile(generatedFile, pojoName + "-beans");
167158
}
168159

169160
private void removeSpringControllerBeanDefinitions() {
@@ -187,11 +178,15 @@ private void removeJSFViews() {
187178
removeGeneratedFiles(installedDirectory + "/src/main/webapp", pojoNameLower + "*.xhtml");
188179
}
189180

190-
private void removeSpringViews() {
191-
removeGeneratedFiles(installedDirectory + "/src/main/webapp", pojoNameLower + "*.jsp");
181+
private void removeSpringViews(String pagesPath) {
182+
removeGeneratedFiles(installedDirectory + pagesPath, pojoNameLower + "*.jsp");
183+
}
184+
185+
private void removeStrutsViews(String pagesPath) {
186+
removeGeneratedFiles(installedDirectory + pagesPath, pojoNameLower + "*.jsp");
192187
}
193188

194-
private void removeStrutsViews() {
189+
private void removeStripesViews() {
195190
removeGeneratedFiles(installedDirectory + "/src/main/webapp", pojoNameLower + "*.jsp");
196191
}
197192

plugins/appfuse-maven-plugin/src/main/resources/appfuse/web/ApplicationResources.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
${pojoNameLower}.added=${pojo.shortName} has been added successfully.
1111
${pojoNameLower}.updated=${pojo.shortName} has been updated successfully.
1212
${pojoNameLower}.deleted=${pojo.shortName} has been deleted successfully.
13+
${pojoNameLower}.missing=${pojo.shortName} has been deleted successfully.
1314

1415
# -- ${pojoNameLower} list page --
1516
${pojoNameLower}List.title=${pojo.shortName} List

plugins/appfuse-maven-plugin/src/main/resources/appfuse/web/spring-freemarker/form-view.ftl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ ${'</#if>'}
9595
</form>
9696
</div>
9797

98-
9998
<#if dateExists><#rt/>
10099
<link rel="stylesheet" type="text/css" media="all" href="${'$'}{rc.contextPath}/webjars/bootstrap-datepicker/1.3.1/css/datepicker.css" />
101100
<script type="text/javascript" src="${'$'}{rc.contextPath}/webjars/bootstrap-datepicker/1.3.1/js/bootstrap-datepicker.js"></script>

plugins/appfuse-maven-plugin/src/main/resources/appfuse/web/spring/form-view.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<#if field.equals(pojo.identifierProperty)>
2727
<#assign idFieldName = field.name>
2828
<#if field.value.identifierGeneratorStrategy == "assigned">
29-
<#lt/><ul>
29+
<#lt/>
3030
<spring:bind path="${pojoNameLower}.${field.name}">
3131
<div class="form-group${'$'}{(not empty status.errorMessage) ? ' has-error' : ''}">
3232
</spring:bind>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<#assign pojoNameLower = pojo.shortName.substring(0,1).toLowerCase()+pojo.shortName.substring(1)>
2+
<#assign getIdMethodName = pojo.getGetterSignature(pojo.identifierProperty)>
3+
<#assign setIdMethodName = 'set' + pojo.getPropertyName(pojo.identifierProperty)>
4+
<#assign identifierType = pojo.getJavaTypeName(pojo.identifierProperty, jdk5)>
5+
package ${basepackage}.webapp.action;
6+
7+
import net.sourceforge.stripes.mock.MockRoundtrip;
8+
import net.sourceforge.stripes.mock.MockServletContext;
9+
import org.junit.After;
10+
import org.junit.Test;
11+
12+
import javax.servlet.Filter;
13+
14+
import static org.junit.Assert.*;
15+
16+
public class ${pojo.shortName}FormBeanTest {
17+
private MockServletContext servletContext;
18+
19+
@Test
20+
public void testView() throws Exception {
21+
servletContext = new StripesTestFixture().getServletContext();
22+
23+
MockRoundtrip trip = new MockRoundtrip(servletContext, ${pojo.shortName}FormBean.class);
24+
String ${pojo.identifierProperty.name} = "-1";
25+
trip.addParameter("${pojo.identifierProperty.name}", ${pojo.identifierProperty.name});
26+
trip.execute();
27+
28+
${pojo.shortName}FormBean bean = trip.getActionBean(${pojo.shortName}FormBean.class);
29+
assertNotNull(bean.get${pojo.shortName}());
30+
}
31+
32+
@After
33+
public void onTearDown() {
34+
// http://www.stripesframework.org/jira/browse/STS-714
35+
for (Filter filter : servletContext.getFilters()) {
36+
filter.destroy();
37+
}
38+
}
39+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<#assign pojoNameLower = pojo.shortName.substring(0,1).toLowerCase()+pojo.shortName.substring(1)>
2+
<#assign getIdMethodName = pojo.getGetterSignature(pojo.identifierProperty)>
3+
<#assign setIdMethodName = 'set' + pojo.getPropertyName(pojo.identifierProperty)>
4+
<#assign identifierType = pojo.getJavaTypeName(pojo.identifierProperty, jdk5)>
5+
package ${basepackage}.webapp.action;
6+
7+
import net.sourceforge.stripes.action.*;
8+
import net.sourceforge.stripes.integration.spring.SpringBean;
9+
import net.sourceforge.stripes.validation.LocalizableError;
10+
import net.sourceforge.stripes.validation.Validate;
11+
import net.sourceforge.stripes.validation.ValidateNestedProperties;
12+
13+
<#if genericcore>
14+
import ${appfusepackage}.service.GenericManager;
15+
<#else>
16+
import ${basepackage}.service.${pojo.shortName}Manager;
17+
</#if>
18+
import ${basepackage}.model.${pojo.shortName};
19+
import org.springframework.orm.ObjectRetrievalFailureException;
20+
21+
@UrlBinding("/${pojoNameLower}form.action")
22+
public class ${pojo.shortName}FormBean extends BaseActionBean {
23+
@SpringBean
24+
<#if genericcore>
25+
private GenericManager<${pojo.shortName}, ${pojo.getJavaTypeName(pojo.identifierProperty, jdk5)}> ${pojoNameLower}Manager;
26+
<#else>
27+
private ${pojo.shortName}Manager ${pojoNameLower}Manager;
28+
</#if>
29+
private ${pojo.shortName} ${pojoNameLower};
30+
private ${identifierType} ${pojo.identifierProperty.name};
31+
32+
public void ${setIdMethodName}(${identifierType} ${pojo.identifierProperty.name}) {
33+
this.${pojo.identifierProperty.name} = ${pojo.identifierProperty.name};
34+
}
35+
36+
public ${pojo.shortName} get${pojo.shortName}() {
37+
return ${pojoNameLower};
38+
}
39+
40+
@ValidateNestedProperties({
41+
<#foreach field in pojo.getAllPropertiesIterator()>
42+
<#foreach column in field.getColumnIterator()>
43+
<#if !field.equals(pojo.identifierProperty) && !column.nullable && !c2h.isCollection(field) && !c2h.isManyToOne(field) && !c2j.isComponent(field)>
44+
<#lt/> @Validate(field = "${field.name}", required = true),
45+
</#if>
46+
</#foreach>
47+
</#foreach>
48+
})
49+
public void set${pojo.shortName}(${pojo.shortName} ${pojoNameLower}) {
50+
this.${pojoNameLower} = ${pojoNameLower};
51+
}
52+
53+
@DontValidate @DefaultHandler
54+
public Resolution view() {
55+
if (${pojo.identifierProperty.name} != null) {
56+
try {
57+
${pojoNameLower} = ${pojoNameLower}Manager.get(${pojo.identifierProperty.name});
58+
} catch (ObjectRetrievalFailureException e) {
59+
e.printStackTrace();
60+
getContext().getMessages().add(new LocalizableMessage("${pojoNameLower}.missing"));
61+
return showList();
62+
}
63+
} else {
64+
${pojoNameLower} = new ${pojo.shortName}();
65+
}
66+
return showForm();
67+
}
68+
69+
@HandlesEvent("save")
70+
public Resolution save() {
71+
${pojoNameLower}Manager.save(${pojoNameLower});
72+
if (${pojoNameLower}.${getIdMethodName}() == null) {
73+
getContext().getMessages().add(new LocalizableMessage("${pojoNameLower}.added"));
74+
} else {
75+
getContext().getMessages().add(new LocalizableMessage("${pojoNameLower}.updated"));
76+
return showForm();
77+
}
78+
return showList();
79+
}
80+
81+
@DontValidate
82+
@HandlesEvent("delete")
83+
public Resolution delete() {
84+
${pojoNameLower}Manager.remove(${pojoNameLower}.${getIdMethodName}());
85+
getContext().getMessages().add(new LocalizableMessage("${pojoNameLower}.deleted"));
86+
return showList();
87+
}
88+
89+
@DontValidate
90+
@HandlesEvent("cancel")
91+
public Resolution cancel() {
92+
return showList();
93+
}
94+
95+
private Resolution showList() {
96+
return new RedirectResolution("/${util.getPluralForWord(pojoNameLower)}").flash(this);
97+
}
98+
99+
private Resolution showForm() {
100+
return new ForwardResolution("/${pojoNameLower}Form.jsp");
101+
}
102+
}

0 commit comments

Comments
 (0)