/*_########################################################################## _## _## Copyright (C) 2013 Kaito Yamada _## _########################################################################## */ package com.github.kaitoy.sneo.giane.action; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.interceptor.ParameterAware; import org.apache.struts2.interceptor.validation.SkipValidation; import org.pcap4j.core.PcapNativeException; import org.pcap4j.core.PcapNetworkInterface; import org.pcap4j.core.Pcaps; import com.github.kaitoy.sneo.giane.action.message.BreadCrumbsMessage; import com.github.kaitoy.sneo.giane.action.message.DialogMessage; import com.github.kaitoy.sneo.giane.action.message.FormMessage; import com.github.kaitoy.sneo.giane.action.message.RealNetworkInterfaceConfigurationMessage; import com.github.kaitoy.sneo.giane.interceptor.GoingBackward; import com.github.kaitoy.sneo.giane.interceptor.GoingForward; import com.github.kaitoy.sneo.giane.model.RealNetworkInterfaceConfiguration; import com.github.kaitoy.sneo.giane.model.RealNetworkInterfaceConfigurationIpAddressRelation; import com.github.kaitoy.sneo.giane.model.dao.IpAddressRelationDao; import com.github.kaitoy.sneo.giane.model.dao.RealNetworkInterfaceConfigurationDao; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.annotations.VisitorFieldValidator; @ParentPackage("giane-default") @InterceptorRef("gianeDefaultStack") public class RealNetworkInterfaceConfigurationAction extends ActionSupport implements ModelDriven<RealNetworkInterfaceConfiguration>, ParameterAware, FormMessage, RealNetworkInterfaceConfigurationMessage, BreadCrumbsMessage, DialogMessage { /** * */ private static final long serialVersionUID = 3711045919986559841L; private static final List<PcapNetworkInterface> DEVICE_LIST; private RealNetworkInterfaceConfiguration model = new RealNetworkInterfaceConfiguration(); private Map<String, String[]> parameters; private RealNetworkInterfaceConfigurationDao realNetworkInterfaceConfigurationDao; private IpAddressRelationDao ipAddressRelationDao; private String uniqueColumn; private String deletingIdList; static { List<PcapNetworkInterface> devList; try { devList = Pcaps.findAllDevs(); } catch (PcapNativeException e) { e.printStackTrace(); devList = new ArrayList<PcapNetworkInterface>(0); } DEVICE_LIST = devList; } public RealNetworkInterfaceConfiguration getModel() { return model; } @VisitorFieldValidator(appendPrefix = true) public void setModel(RealNetworkInterfaceConfiguration model) { this.model = model; } public void setParameters(Map<String, String[]> parameters) { this.parameters = parameters; } // for DI public void setRealNetworkInterfaceConfigurationDao( RealNetworkInterfaceConfigurationDao realNetworkInterfaceConfigurationDao ) { this.realNetworkInterfaceConfigurationDao = realNetworkInterfaceConfigurationDao; } // for DI public void setIpAddressRelationDao(IpAddressRelationDao ipAddressRelationDao) { this.ipAddressRelationDao = ipAddressRelationDao; } public String getUniqueColumn() { return uniqueColumn; } public void setDeletingIdList(String deletingIdList) { this.deletingIdList = deletingIdList; } public static List<PcapNetworkInterface> getDeviceList() { return DEVICE_LIST; } public Map<String, String> getDevices() { Map<String, String> map = new TreeMap<String, String>(); int id = 0; for (PcapNetworkInterface dev: DEVICE_LIST) { StringBuilder sb = new StringBuilder(100); id++; sb.append(id).append(":").append(dev.getName()); map.put(sb.toString(), sb.toString()); } return map; } @Override @GoingForward public String execute() throws Exception { ValueStack stack = ActionContext.getContext().getValueStack(); Map<String, Object> valueMap = new HashMap<String, Object>(); setModel(realNetworkInterfaceConfigurationDao.findByKey(model.getId())); valueMap.put( "realNetworkInterfaceConfiguration_name", model.getName() ); valueMap.put( "ipAddressRelation_id", model.getIpAddressRelation().getId() ); stack.push(valueMap); return "config"; } @Action( value = "back-to-real-network-interface-configuration-config", results = { @Result(name = "config", location = "real-network-interface-configuration-config.jsp")} ) @SkipValidation @GoingBackward public String back() throws Exception { ValueStack stack = ActionContext.getContext().getValueStack(); Map<String, Object> valueMap = new HashMap<String, Object>(); valueMap.put("realNetworkInterfaceConfiguration_name", parameters.get("realNetworkInterfaceConfiguration_name")[0]); valueMap.put("ipAddressRelation_id", parameters.get("ipAddressRelation_id")[0]); stack.push(valueMap); return "config"; } @Action( value = "real-network-interface-configuration-tab-content", results = { @Result( name = "tab", location = "real-network-interface-configuration-tab-content.jsp" ) } ) @SkipValidation public String tab() throws Exception { return "tab"; } @Action( value = "real-network-interface-configuration-create", results = { @Result(name = "success", location = "empty.jsp") } ) public String create() throws Exception { RealNetworkInterfaceConfigurationIpAddressRelation relation = new RealNetworkInterfaceConfigurationIpAddressRelation(); relation.setRealNetworkInterfaceConfiguration(model); ipAddressRelationDao.create(relation); model.setIpAddressRelation(relation); realNetworkInterfaceConfigurationDao.create(model); return "success"; } @Action( value = "real-network-interface-configuration-update", results = { @Result(name = "success", location = "empty.jsp") } ) public String update() throws Exception { RealNetworkInterfaceConfiguration update = realNetworkInterfaceConfigurationDao.findByKey(model.getId()); update.setName(model.getName()); update.setMacAddress(model.getMacAddress()); update.setDeviceName(model.getDeviceName()); update.setDescr(model.getDescr()); realNetworkInterfaceConfigurationDao.update(update); return "success"; } @Action( value = "real-network-interface-configuration-delete", results = { @Result(name = "success", location = "empty.jsp") } ) @SkipValidation public String delete() throws Exception { List<RealNetworkInterfaceConfiguration> deletingList = new ArrayList<RealNetworkInterfaceConfiguration>(); for (String idStr: deletingIdList.split(",")) { deletingList.add( realNetworkInterfaceConfigurationDao.findByKey(Integer.valueOf(idStr)) ); } realNetworkInterfaceConfigurationDao.delete(deletingList); return "success"; } @Action( value = "show-device-list", results = { @Result(name = "success", location = "device-list.jsp") } ) @SkipValidation public String showDeviceList() throws Exception { return "success"; } @Override public void validate() { String contextName = ActionContext.getContext().getName(); if (contextName.equals("real-network-interface-configuration")) { if (model.getId() == null) { addActionError(getText("select.a.row")); return; } } if (contextName.equals("real-network-interface-configuration-update")) { if (model.getId() == null) { addActionError(getText("select.a.row")); return; } if (model.getName() != null) { RealNetworkInterfaceConfiguration someone = realNetworkInterfaceConfigurationDao.findByName(model.getName()); if (someone != null && !someone.getId().equals(model.getId())) { uniqueColumn = getText("realNetworkInterfaceConfiguration.name.label"); addFieldError("name", getText("need.to.be.unique")); return; } } } if (contextName.equals("real-network-interface-configuration-create")) { if ( model.getName() != null && realNetworkInterfaceConfigurationDao.findByName(model.getName()) != null ) { uniqueColumn = getText("realNetworkInterfaceConfiguration.name.label"); addFieldError("name", getText("need.to.be.unique")); return; } } } }