package com.project.customization.action;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import com.project.customization.service.CustXMLBeanService;
import com.project.customization.service.CustomizationService;
import com.project.customization.vo.CustomizationAttributeVO;
import com.project.customization.vo.CustomizationVO;
import com.project.customization.web.CustomizationSessionContext;
public class CustomizationAction extends ActionSupport implements Preparable {
private static Logger logger = Logger.getLogger(CustomizationAction.class);
private CustomizationVO ngContainerVO;
private CustomizationAttributeVO attributeVO;
private String submit;
private List<CustomizationVO> uiContainerList;
private String userId;
private CustomizationService customizationService;
private Map<String, String> modifiedAttributes = new LinkedHashMap<String, String>();
public void prepare() throws Exception {
}
public String login() {
return Action.SUCCESS;
}
public String reLogin() {
addActionMessage("User Session has expired. Please login");
return Action.SUCCESS;
}
public String actionLogin() {
if (userId == null || userId.trim().length() <= 0) {
addActionError("Please enter a valid user Id");
return "failure";
}
CustomizationSessionContext.initialize(userId);
return Action.SUCCESS;
}
public String logout() {
addActionMessage("Thank you for using the application.");
CustomizationSessionContext.logout();
return Action.SUCCESS;
}
public String list() throws Exception {
uiContainerList = CustXMLBeanService.getInstance().listNGUICustomization();
return Action.SUCCESS;
}
public String display() throws Exception {
ngContainerVO = loadData();
return Action.SUCCESS;
}
private CustomizationVO loadData() {
return getCustomizationService().getLoggedInUserCustomizationVO(ngContainerVO.getId()).clone();
}
public String submit() throws Exception {
logger.debug("[Enter] Submit");
validateInput();
if (!hasFieldErrors()) {
CustomizationVO storeDataVO = loadData();
for (int i = 0; i < ngContainerVO.getNgAttributes().size(); i++) {
CustomizationAttributeVO modifiedAttributeVO = ngContainerVO.getNgAttributes().get(i);
CustomizationAttributeVO savedAttributeVO = storeDataVO.getNgAttributeMap().get(modifiedAttributeVO.getId());
String savedValue = savedAttributeVO.getValue();
if ((savedValue == null && !isStringEmpty(modifiedAttributeVO.getValue()))
|| (modifiedAttributeVO.getValue() == null && !isStringEmpty(savedValue))
|| (savedValue != null && !savedValue.equals(modifiedAttributeVO.getValue()) && !(isStringEmpty(savedValue) && isStringEmpty(modifiedAttributeVO
.getValue())))) {
String value = modifiedAttributeVO.getValue();
if (savedAttributeVO.getDisplayType().equals("select")) {
value = (String) savedAttributeVO.getEnumValues().get(modifiedAttributeVO.getValue());
} else if (savedAttributeVO.getDisplayType().equals("check")
&& isStringEmpty(modifiedAttributeVO.getValue())) {
value = "none";
} else if (savedAttributeVO.getDisplayType().equals("check")) {
Set<String> valueList = modifiedAttributeVO.getValueSet();
StringBuffer values = new StringBuffer("");
for (String val : valueList) {
values.append(savedAttributeVO.getEnumValues().get(val)).append(", ");
}
if(values.length() > 0) {
value = values.toString().substring(0,values.length() -2);
}
}
modifiedAttributes.put(savedAttributeVO.getDisplayName(), value);
}
}
CustomizationSessionContext.getSessionContext().setAttribute("modified.customization.vo", ngContainerVO);
CustomizationSessionContext.getSessionContext().setAttribute("modified.attributes", modifiedAttributes);
return display();
} else {
// TODO-VENKAT: any other better approach to avoid merging
CustomizationVO storeDataVO = loadData();
// start merge
for (int i = 0; i < storeDataVO.getNgAttributes().size(); i++) {
CustomizationAttributeVO attributeVO = storeDataVO.getNgAttributes().get(i);
attributeVO.setValue(ngContainerVO.getNgAttributes().get(i).getValue());
}
ngContainerVO = storeDataVO;
return "validationError";
}
}
private boolean isStringEmpty(String str) {
return str == null || str.trim().length() <= 0 ? true : false;
}
public String actionConfirm() throws Exception {
logger.debug("[Enter] actionConfirm");
if (getSubmit().equals("confirm")) {
ngContainerVO = (CustomizationVO) CustomizationSessionContext.getSessionContext().getAttribute(
"modified.customization.vo");
getCustomizationService()
.save(ngContainerVO, CustomizationSessionContext.getSessionContext().getLoggedInUserId());
addActionMessage("User Customization Saved Successfully. Acknowledgment email has been sent.");
} else {
addActionMessage("User Customization changes Cancelled.");
}
//clean it up
CustomizationSessionContext.getSessionContext().setAttribute("modified.customization.vo", null);
CustomizationSessionContext.getSessionContext().setAttribute("modified.attributes", null);
list();
return Action.SUCCESS;
}
private void validateInput() {
// TODO-VENKAT: see if u eliminate creating clone objects
for (int i = 0; i < ngContainerVO.getNgAttributes().size(); i++) {
CustomizationAttributeVO attribvo = ngContainerVO.getNgAttributes().get(i);
CustomizationAttributeVO metaDataVO = CustXMLBeanService.getInstance().getNgAttributeById(
ngContainerVO.getId(), attribvo.getId());
if (metaDataVO.getRegex() != null && metaDataVO.getRegex().length() > 0) {
logger.debug(metaDataVO.getRegex().trim() + " -- " + attribvo.getValue());
if (attribvo.getValue() == null) {
attribvo.setValue(""); // else Pattern class throws
// exception
}
if (!Pattern.matches(metaDataVO.getRegex().trim(), attribvo.getValue())) {
addFieldError("ngContainerVO.ngAttributes[" + i + "].value", "Invalid Data for input field "
+ metaDataVO.getDisplayName());
}
}
}
}
public CustomizationVO getNgContainerVO() {
return ngContainerVO;
}
public void setNgContainerVO(CustomizationVO ngContainerVO) {
this.ngContainerVO = ngContainerVO;
}
public String getSubmit() {
return submit;
}
public void setSubmit(String submit) {
this.submit = submit;
}
public CustomizationAttributeVO getAttributeVO() {
return attributeVO;
}
public void setAttributeVO(CustomizationAttributeVO attributeVO) {
this.attributeVO = attributeVO;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public List<CustomizationVO> getUiContainerList() {
return uiContainerList;
}
public void setUiContainerList(List<CustomizationVO> uiContainerList) {
this.uiContainerList = uiContainerList;
}
public CustomizationService getCustomizationService() {
return customizationService;
}
public void setCustomizationService(CustomizationService customizationService) {
this.customizationService = customizationService;
}
public Map<String, String> getModifiedAttributes() {
return modifiedAttributes;
}
public void setModifiedAttributes(Map<String, String> modifiedAttributes) {
this.modifiedAttributes = modifiedAttributes;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Struts2 应用程序示例
共91个文件
xml:18个
class:18个
java:18个
5星 · 超过95%的资源 需积分: 9 51 下载量 71 浏览量
2008-04-07
09:36:43
上传
评论
收藏 8.91MB RAR 举报
温馨提示
这是使用Eclipse 3.3, JDK 6.0,以及Tomcat 6.0翻写的Struts2的演示程序。它是了解和学习Struts2的好例子。
资源推荐
资源详情
资源评论
收起资源包目录
Struts2AppDemo.rar (91个子文件)
Struts2AppDemo
.project 859B
.hibernateSynchronizer3
config.properties 417B
templates
snippets
.settings
org.eclipse.wst.common.component 416B
org.eclipse.jdt.core.prefs 330B
org.eclipse.wst.common.project.facet.core.xml 269B
org.eclipse.jst.common.project.facet.core.prefs 364B
src
conf
customization
Customization.xml 3KB
log4j
CustomizationLog4j.xml 2KB
com
project
customization
dao
test
TestFirstDAO.java 473B
FirstTestDAO.java 455B
BaseDAO.java 2KB
connection
DBConnection.java 2KB
action
CustomizationAction.java 8KB
exception
ApplicationException.java 431B
vo
CustomizationVO.java 2KB
CustomizationAttributeVO.java 3KB
interceptors
LoggingInterceptor.java 1KB
LoginSessionInterceptor.java 1KB
web
CustomizationSessionContext.java 2KB
service
CustomizationCacheService.java 1KB
CustomizationServiceImpl.java 4KB
CustXMLBeanService.java 6KB
CustomizationCacheServiceImpl.java 4KB
CustomizationService.java 538B
util
CustomizationServletContextListener.java 885B
struts-Customization.xml 2KB
template
cust
TemplateDir.java 68B
displayCustomizationChanges.ftl 203B
struts.xml 426B
struts-base.xml 1KB
build
classes
conf
customization
Customization.xml 3KB
log4j
CustomizationLog4j.xml 2KB
com
project
customization
dao
test
TestFirstDAO.class 649B
connection
DBConnection.class 1KB
FirstTestDAO.class 749B
BaseDAO.class 2KB
action
CustomizationAction.class 9KB
exception
ApplicationException.class 913B
vo
CustomizationAttributeVO.class 4KB
CustomizationVO.class 4KB
interceptors
LoggingInterceptor.class 2KB
LoginSessionInterceptor.class 2KB
web
CustomizationSessionContext.class 3KB
service
CustomizationCacheService.class 724B
CustomizationService.class 548B
CustomizationServiceImpl.class 5KB
CustomizationCacheServiceImpl.class 4KB
CustXMLBeanService.class 10KB
util
CustomizationServletContextListener.class 1KB
struts-Customization.xml 2KB
template
cust
TemplateDir.class 286B
displayCustomizationChanges.ftl 203B
struts.xml 426B
struts-base.xml 1KB
WebContent
css
master.css 17KB
WEB-INF
web.xml 1KB
applicationContext.xml 1KB
web
jsp
common
NGTopLinksInclude.jsp 358B
UserMessageAndErrorDisplay.jsp 542B
Login.jsp 1KB
ApplicationErrorPage.jsp 466B
ngcust
CustomizationDisplay.jsp 2KB
ReviewAndSubmitCustomization.jsp 974B
CustomizationList.jsp 2KB
lib
commons-logging.jar 52KB
log4j-1.2.13.jar 350KB
saaj.jar 19KB
struts2-spring-plugin-2.0.6.jar 8KB
struts2-core-2.0.6.jar 2.09MB
xmlpublic.jar 419KB
ognl-2.6.11.jar 164KB
customizationXMLBeans.jar 106KB
xwork-2.0.1.jar 442KB
freemarker-2.3.8.jar 784KB
jsr173_1.0_api.jar 23KB
xbean.jar 2.54MB
xbean_xpath.jar 5KB
commons-discovery.jar 70KB
spring-struts.jar 25KB
spring.jar 2.47MB
freemarker.jar 784KB
resolver.jar 59KB
classes
conf
customization
Customization.xml 3KB
log4j
CustomizationLog4j.xml 2KB
com
project
customization
action
exception
vo
interceptors
web
service
util
struts-Customization.xml 2KB
template
cust
displayCustomizationChanges.ftl 203B
struts.xml 426B
struts-base.xml 1KB
META-INF
MANIFEST.MF 39B
index.html 351B
.classpath 615B
共 91 条
- 1
资源评论
- abcd444552013-06-24我忘了好像,得改改才能用,不过还是谢谢分享
技术大黍-曾老师
- 粉丝: 109
- 资源: 108
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功