i have java class writing code applying overrides. want know if using enum appropriate or if need use switch case, how can use it? also, have loop need use common block of code each override type. apart that, have few separate fields need code each override type.
public class ewfmservice { private workbrainsystemaccessservice wsa = new workbrainsystemaccessservice(); private static final org.apache.log4j.logger logger = org.apache.log4j.logger.getlogger(ewfmservice.class); private final static string ovrcalcgrp = "ovrcalcgrp"; private dbconnection conn = null; private int empid; private date ovrdate; private string ovrtime; private string ovraction; public list<ewfmservicedata> getprocessewfmoverrides(string username, string password, list<ewfmserviceinputdata> inputdata) throws wsapplicationexception{ logger.debug("ewfm service"); wsa.logon(username, password); list<ewfmservicedata> returnlist = new arraylist<ewfmservicedata> (); logger.debug("username = " + username); dbconnection conn = null; preparedstatement ps = null; resultset rs = null; try{ conn = new dbconnection(connectionmanager.getconnection()); (int = 0; < inputdata.size(); i++) {
here want retrieve emp_id database, store value in variable , able use variable in rest of program. how do it? retrieve emp_id, using following query.
conn = new dbconnection(connectionmanager.getconnection()); string sql = "select emp_id employee_history" + " emp_val2 = **this want use variable in values of emp_id stored. there can more 100 emp_ids**" + " , sysdate between emphist_start_date , emphist_end_date"; ewfmserviceinputdata indata = (ewfmserviceinputdata) inputdata.get(i); overridetype ot = overridetype.getoverridetype(indata.getrecordtype()); logger.debug("override type = " + ot.tostring()); logger.debug("inputdata ["+i+"] = " + indata.tostring()); overrideaccess oa = new overrideaccess(conn); overridedata ovr = new overridedata(); ovr.setovrudf4(indata.getreferenceid().tostring()); if (ovraction.equals("apply")) { ovr.setovrstatus(overridedata.pending);
here want determine action. if apply, need find out recordtype. branch out each recordtype using if else statements or enum believe switch doesn't support java 1.5 using. each recordtype, branch out , write appropriate code corresponding recordtype. if action cancel, write following code.
} else if (ovraction.equals("cancel")) { string sql = "select * override" + " ovr_udf4 = ?" + " , ovrtyp_id = ?"; ps = conn.preparestatement(sql); rs = ps.executequery(); while (rs.next()); { ovr.assignbyname(rs); ovr.setupdated(false); ovr.setretrieved(true); ovr.setovrstatus(overridedata.cancel); oa.save(ovr); } } ovr.setempid(empid); string strovrdate = indata.getovrstartdate(); ovr.setovrstartdate(datehelper.parsedate(strovrdate, "mm/dd/yyyy")); if (ovrstarttime != null) { ovr.setovrstarttime(ovrtime); } object ovrenddate; if (ovrenddate != null) { ovr.setovrenddate(ovrdate); } object ovrendtime; if (ovrendtime!= null) { ovr.setovrendtime(ovrtime); } ovr.setovrcomment(indata.getovrcomments()); ovr.setwbuname(indata.getwbuname()); ovr.setwbunameactual(indata.getwbunameactual()); ovr.setovrnewvalue("vac"); ovr.setovrcreatedate(new date()); ovr.setovrtypid(103); oa.insert(ovr); ruleengine.runcalcgroup(conn, empid, ovrdate, ovrdate); //common block ends here ewfmservicedata outdata = new ewfmservicedata(); outdata.setreferenceid(indata.getreferenceid()); string [] status = {"success", "error", "locked", "exception"}; random ran = new random(); string gen = status[ran.nextint(status.length)]; logger.debug("status is" + status ); outdata.setstatus(gen); if (gen.equals("success")){ outdata.seterrordetails(""); } else if (gen.equals("error")) { outdata.seterrordetails("usage of time code vac not allowed; balance insufficient." + " error"); } else if (gen.equals("locked")) { outdata.seterrordetails("timesheet cannot edited because locked payroll close." + "locked"); } else if (gen.equals("exception")) { outdata.seterrordetails("{ml}qr_incorrect_condition_parameter{/ml}error in condition awa self override condition: java.lang.nullpointerexception{args}awa self override conditionjava.lang.nullpointerexception{/args" + "exception"); } returnlist.add(outdata); } }catch (exception e){ logger.error("error occured",e); throw new wsapplicationexception("error retrieved",e); }finally{ sqlutil.cleanup(conn, ps, rs); } wsa.logoff(); logger.debug("inputdata+ "); return returnlist; } // need know if writing enum okay or can write switch case above in loop , branch each override type , declare individual variables there? what's best way? can me code? public enum overridetype { workdetail, workpremium, employeeschedule, employee; public static overridetype getoverridetype(string recordtype) { if(recordtype == null) { throw new illegalargumentexception("record type cannot null"); } if(recordtype.equals("work detail")) { return workdetail; } else if (recordtype.equals("work premium")) { return workpremium; } else if (recordtype.equals("schedule")) { return employeeschedule; } else if (recordtype.equals("shift pattern")) { return employee; } else { throw new illegalargumentexception("record type cannot be" + recordtype); } } } }
the other fields need include follows:
- for workdetail, need use timecode of format sent client.
- for work premium, need use timecode of format sent client , field minutes gives number of minutes sent client.
generally, using enums appropriate, if have defined set of possible types.
you can add behavior enums, make enum little bit more sophisticated:
public enum overridetype { workdetail("work detail"), workpremium("work premium"), employeeschedule("schedule"), employee("shift pattern"); private string identifier; private overridetype(string identifier){ this.identifier = identifier; } public static overridetype getoverridetype(string recordtype) { if(recordtype == null) { throw new illegalargumentexception("record type cannot null"); } (overridetype ot : overridetype.values()) { if (recordtype.equals(ot.identifier)) { return ot; } } return null; } }
the following example shows how use interface in enums or abstract method definition:
public enum overridetype implements overridetypeif { workdetail("work detail") { public int getkey() { return 0; } }, workpremium("work premium") { public int getkey() { return 0; } }, employeeschedule("schedule") { public int getkey() { return 0; } }, employee("shift pattern") { public int getkey() { return 0; } public void myinterfacemethod() { // type specific behavior } }; private string identifier; private overridetype(string identifier){ this.identifier = identifier; } public abstract int getkey(); public void myinterfacemethod() { // default behavior } public static overridetype getoverridetype(string recordtype) { if(recordtype == null) { throw new illegalargumentexception("record type cannot null"); } (overridetype ot : overridetype.values()) { if (recordtype.equals(ot.identifier)) { return ot; } } return null; } } public interface overridetypeif { void myinterfacemethod(); }
Comments
Post a Comment