Thread: [Amavisadmin-svn] SF.net SVN: amavisadmin: [18] amavisadmin/trunk
Status: Beta
Brought to you by:
streindl
From: <str...@us...> - 2007-01-16 21:35:39
|
Revision: 18 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=18&view=rev Author: streindl Date: 2007-01-16 13:35:29 -0800 (Tue, 16 Jan 2007) Log Message: ----------- * Migration is working now * several refactorings due to wrong data types (mixed string and chars) * Edit new user didn't work Modified Paths: -------------- amavisadmin/trunk/db/postgres/update_v0_v1.sql amavisadmin/trunk/nbproject/private/private.properties amavisadmin/trunk/nbproject/project.properties amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/AmavisAdminToolInitServlet.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/UserBO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMessage.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMsgReceipient.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractPolicy.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/JobDAO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailAddressDAO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/BaseJob.java amavisadmin/trunk/src/java/log4j.properties amavisadmin/trunk/web/MyRequests.jsp amavisadmin/trunk/web/UserManagement.jsp Modified: amavisadmin/trunk/db/postgres/update_v0_v1.sql =================================================================== --- amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-16 21:35:29 UTC (rev 18) @@ -17,7 +17,8 @@ job_description varchar(255) not null, job_cron_settings varchar(30) not null, job_class varchar(255) not null, - job_enabled bool default false, + job_special bool not null default false, + job_enabled bool not null default false, job_last_run_date timestamp, primary key (job_name)); @@ -25,7 +26,8 @@ id int4 not null, version int4 default 0 not null, sender varchar(255) not null, - mail_status char(1) default ' ' not null check (mail_status in (' ', 'I', 'S', 'E')), + mail_status char(1) default ' ' not null + check (mail_status in (' ', 'I', 'S', 'E')), send_date timestamp, subject varchar(255) not null, encoding varchar(128) not null, @@ -70,28 +72,28 @@ -- 2.2 Business related fields -- 2.2.1 MADDR.USER_ID --- The field user id contains a link to the user which owns this entry. This can be used --- to handle more than one mail address per user. +-- The field user id contains a link to the user which owns this entry. +-- This can be used to handle more than one mail address per user. alter table maddr add column user_id int4; -- 2.2.2 MSGRCPT.REQUEST_USER --- This field contains the user-id of the user which requested the release of the corresponding --- mail recipient entry. +-- This field contains the user-id of the user which requested the release +-- of the corresponding mail recipient entry. alter table msgrcpt add column request_user int4; -- 2.2.3 USER.PASSWORD --- Obviously the password of the user. The password is stored encrypted by using a hasing --- function. +-- Obviously the password of the user. The password is stored encrypted by +-- using a hasing function. alter table users add column password varchar(255); -- 2.2.4 USER.ADMIN --- If this field is true, the user is an admin user. This field is temporary only until --- roles are implemented. +-- If this field is true, the user is an admin user. This field is temporary +-- only until roles are implemented. alter table users add column admin bool default false; -- 2.2.5 USER.LAST_LOGIN -- This field stores the timstamp when the user has logged in the last time. -alter table users add column last_login timestamp with timestamp; +alter table users add column last_login timestamp with time zone; -- 2.2.6 USER.LOCKED -- If this field is true, the user is locked, i.e. he cannot login. @@ -105,22 +107,33 @@ -- basically new references to new fields and renaming of existing -- constraints with internal names ($1...). -alter table maddr add constraint maddr_fk_1 foreign key (user_id) references users -alter table configuration add constraint constraint_fk_1 foreign key (job_ref) references jobs +alter table maddr add constraint maddr_fk_1 foreign key (user_id) references users; +alter table configuration add constraint constraint_fk_1 + foreign key (job_ref) references jobs; -alter table mail_queue_rcpts add constraint mail_queue_recpts_fk_1 foreign key (mail_queue_id) references mail_queue +alter table mail_queue_rcpts add constraint mail_queue_recpts_fk_1 + foreign key (mail_queue_id) references mail_queue; -alter table msgrcpt drop constraint '$1'; -alter table msgrcpt drop constraint '$2'; -alter table msgrcpt add constraint msgrcpt_fk_1 foreign key (request_user) references users; +alter table msgrcpt drop constraint "$1"; +alter table msgrcpt drop constraint "$2"; +alter table msgrcpt add + constraint msgrcpt_fk_1 foreign key (request_user) references users; alter table msgrcpt add constraint msgrcpt_fk_2 foreign key (rid) references maddr; alter table msgrcpt add constraint msgrcpt_fk_3 foreign key (mail_id) references msgs; -alter table msgs drop constraint '$1'; +alter table msgs drop constraint "$1"; alter table msgs add constraint msgs_fk_1 foreign key (sid) references maddr; -alter table quarantine drop constraint '$1'; -alter table quarantine add constraint quarantine_fk_1 foreign key (mail_id) references msgs +alter table quarantine drop constraint "$1"; +alter table quarantine add constraint quarantine_fk_1 foreign key (mail_id) references msgs; +-- 4. Load data +-- 4.1 Migration Job +insert into jobs (job_name, job_description, job_cron_settings, + job_class, job_enabled, job_special) + values ('$$Migrate V0 to V1', 'Migration', 'dummy', + 'de.sreindl.amavisadmin.migration.MigrateV0toV1', true, true); + + -- 4. Configuration version update -insert into configuration (key, value) values ('amavisadmin.dbversion', '1'); +insert into configuration ("key", "value") values ('amavisadmin.db_version', '1'); Modified: amavisadmin/trunk/nbproject/private/private.properties =================================================================== --- amavisadmin/trunk/nbproject/private/private.properties 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/nbproject/private/private.properties 2007-01-16 21:35:29 UTC (rev 18) @@ -1,6 +1,6 @@ -deploy.ant.properties.file=/home/sreindl/.netbeans/5.5/tomcat55.properties -j2ee.platform.classpath=/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/ant.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/netbeans-5.5/enterprise3/apache-tomcat-5.5.17/common/lib/servlet-api.jar -j2ee.server.instance=tomcat55:home=$bundled_home:base=$bundled_base +deploy.ant.properties.file=/home/sreindl/.netbeans/5.5/tomcat55_1.properties +j2ee.platform.classpath=/opt/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler-jdt.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/apache-tomcat-5.5.17/common/lib/servlet-api.jar +j2ee.server.instance=tomcat55:home=/opt/apache-tomcat-5.5.17 javac.debug=true javadoc.preview=true libs.FreeJGraph.classpath.libfile.1=/shares/tools/jfreechart-1.0.2/lib/jcommon-1.0.5.jar Modified: amavisadmin/trunk/nbproject/project.properties =================================================================== --- amavisadmin/trunk/nbproject/project.properties 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/nbproject/project.properties 2007-01-16 21:35:29 UTC (rev 18) @@ -15,7 +15,7 @@ debug.classpath=${javac.classpath}:${build.classes.dir}:${build.ear.classes.dir} debug.test.classpath=\ ${run.test.classpath} -display.browser=true +display.browser=false dist.dir=dist dist.ear.war=${dist.dir}/${war.ear.name} dist.javadoc.dir=${dist.dir}/javadoc Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java 2007-01-16 21:35:29 UTC (rev 18) @@ -478,10 +478,14 @@ * this page.</p> */ public void prerender() { - ArrayList<Option> lst = (ArrayList<Option>)getSessionBean1().getParameter(EMAIL_LIST); + ArrayList<Option> lst = null; if (user == null) { + erase(); fldUserId.setText("unset"); + lst = new ArrayList<Option>(); + getSessionBean1().setParameter(EMAIL_LIST, lst); } else { + lst = (ArrayList<Option>)getSessionBean1().getParameter(EMAIL_LIST); fldUserId.setText(user.getId().toString()); fldUserName.setText(user.getUsername()); fldFullName.setText(user.getFullname()); @@ -620,7 +624,7 @@ /** Session key for @see deleteMap */ private static final String DELETE_MAIL_MAP = "editUser.DELETE_MAIL_MAP"; - + /** Session key for email list */ private static final String EMAIL_LIST = "editUser.EMAIL_LIST"; Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-16 21:35:29 UTC (rev 18) @@ -609,7 +609,7 @@ * </p> * @param selectedRowKeys The rows to be "removed". */ - private int handleRequests(RowKey[] selectedRowKeys, String requestType) { + private int handleRequests(RowKey[] selectedRowKeys, Character requestType) { Session session = HibernateSessionFactory.getSession(); Transaction trx = null; MsgReceipient msgr = null; Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java 2007-01-16 21:35:29 UTC (rev 18) @@ -21,7 +21,8 @@ import com.sun.rave.web.ui.model.DefaultOptionsList; import com.sun.sql.rowset.CachedRowSetXImpl; import de.sreindl.amavisadmin.bo.configuration.ConfigurationDataTable; -import de.sreindl.amavisadmin.db.*; +import de.sreindl.amavisadmin.db.MailAddress; +import de.sreindl.amavisadmin.db.User; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; import de.sreindl.amavisadmin.visuals.UserListDataProvider; import java.util.HashMap; @@ -72,7 +73,7 @@ approvePendingRowSet.setTableName("msgrcpt"); approvePendingDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet)getValue("#{SessionBean1.approvePendingRowSet}")); jobsRowSet.setDataSourceName("java:comp/env/jdbc/amavisDB"); - jobsRowSet.setCommand("SELECT ALL PUBLIC.jobs.job_name, \n PUBLIC.jobs.job_description, \n PUBLIC.jobs.job_cron_settings, \n PUBLIC.jobs.job_class, \n PUBLIC.jobs.job_enabled, \n PUBLIC.jobs.job_last_run_date \nFROM PUBLIC.jobs\nORDER BY PUBLIC.jobs.job_name ASC "); + jobsRowSet.setCommand("SELECT ALL PUBLIC.jobs.job_name, \n PUBLIC.jobs.job_description, \n PUBLIC.jobs.job_cron_settings, \n PUBLIC.jobs.job_class, \n PUBLIC.jobs.job_enabled, \n PUBLIC.jobs.job_last_run_date \nFROM PUBLIC.jobs\nWHERE PUBLIC.jobs.job_special = 'false'\nORDER BY PUBLIC.jobs.job_name ASC "); jobsRowSet.setTableName("jobs"); jobsDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet)getValue("#{SessionBean1.jobsRowSet}")); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java 2007-01-16 21:35:29 UTC (rev 18) @@ -431,14 +431,6 @@ } } - - public String btnAddNew_action() { - erase(); // clear all values - getSessionBean1().setParameter(SessionBean1.PARAM_USER_ID, null); - return null; - } - - public String btnSave_action() { User user = (User)getSessionBean1().getParameter(SessionBean1.PARAM_USER_ID); if (user == null) { @@ -470,6 +462,10 @@ return null; } + public String btnAdd_action() { + getSessionBean1().setParameter(SessionBean1.PARAM_USER_ID, null); + return "editSingleUser"; + } public void fldRetention_validate(FacesContext context, UIComponent component, Object value) { // TODO: Check the value parameter here, and if not valid, do something like this: @@ -499,5 +495,6 @@ * Maximum number of days for retention allowed */ public static final String CONF_MAX_RETENTION = "amavisadmin.conf.max_retention"; + } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/AmavisAdminToolInitServlet.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/AmavisAdminToolInitServlet.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/AmavisAdminToolInitServlet.java 2007-01-16 21:35:29 UTC (rev 18) @@ -15,12 +15,15 @@ */ package de.sreindl.amavisadmin.bo; +import de.sreindl.amavisadmin.db.Job; +import de.sreindl.amavisadmin.db.JobDAO; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; import de.sreindl.amavisadmin.jobs.BaseJob; -import de.sreindl.amavisadmin.jobs.MessagesCleanupJob; -import de.sreindl.amavisadmin.jobs.RetentionCleanupJob; +import de.sreindl.amavisadmin.migration.MigrationJob; import java.text.ParseException; import java.util.Date; +import java.util.Iterator; +import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; @@ -29,24 +32,16 @@ import org.apache.commons.logging.LogFactory; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.RuntimeSingleton; -import org.apache.velocity.runtime.log.JdkLogChute; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; -import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.hibernate.tool.hbm2ddl.SchemaValidator; -import org.quartz.CronTrigger; -import org.quartz.JobDetail; -import org.quartz.Scheduler; import org.quartz.SchedulerException; -import org.quartz.Trigger; import org.quartz.ee.servlet.QuartzInitializerServlet; import org.quartz.impl.StdSchedulerFactory; -import java.util.Calendar; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.servlet.Servlet; import org.apache.velocity.app.Velocity; +import org.hibernate.Transaction; /** * @@ -100,7 +95,7 @@ (StdSchedulerFactory) servletConfig.getServletContext() .getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY); startJobScheduling(factory); - } + } } catch (Exception e) { log.fatal(e.getMessage(), e); state = LOAD_ERROR; @@ -110,7 +105,6 @@ } public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException { - log.error("Service called for Hibernate"); } public String getServletInfo() { @@ -130,7 +124,7 @@ log.info("Saving configuration"); ConfigurationBO.saveConfiguration(); } catch (Exception e) { - log.error ("Exception during destroy : " + e.getMessage(), e); + log.error("Exception during destroy : " + e.getMessage(), e); } } @@ -142,12 +136,12 @@ SchemaValidator sv = new SchemaValidator(cfg); sv.validate(); } catch (HibernateException he) { - log.fatal("Database validation failed. Please update database first"); + log.fatal("Database validation failed. Please update database first", he); state = LOAD_ERROR; return; } // if we pass here, at least the schema validation has passed - // get db configuration. + performDbMigration(); log.info("Finished schema validation"); } @@ -163,11 +157,11 @@ private void doInitializeTemplateEngine() throws Exception { String resourceLoader = "class"; String resourceFilePath = null; - + log.info("Initialize template engine"); - RuntimeSingleton.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute" ); + RuntimeSingleton.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute" ); RuntimeSingleton.setProperty("runtime.log.logsystem.log4j.logger", "org.velocity"); - + // class loader RuntimeSingleton.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); @@ -181,5 +175,44 @@ log.info("Finished initialisation of template engine"); } + private void performDbMigration() { + log.info("Start database migration"); + Session session = HibernateSessionFactory.getSession(); + Transaction trx = session.beginTransaction(); + JobDAO dao = new JobDAO(); + List migJobs = dao.findBySpecialPurpose(Boolean.TRUE); + Iterator jobIt = migJobs.iterator(); + try { + while (jobIt.hasNext()) { + Job job = (Job)jobIt.next(); + if (!job.getEnabled().booleanValue()) { + continue; // already performed + } else { + log.info("Starting job " + job.getJobName()); + MigrationJob migrate = null; + try { + migrate = (MigrationJob)job.getJobClass().newInstance(); + } catch (ClassCastException cce) { + log.error("class " + job.getJobClass().getName() + " is not a BaseJob class"); + } + // run migration job + if (migrate != null) { + migrate.migrate(); + } + // update job + job.setEnabled(Boolean.FALSE); + job.setLastRun(new Date()); + session.update(job); + } + } + trx.commit(); + } catch (Exception e) { + log.error ("Exception during migration " + e.getMessage(), e); + if (trx.isActive()) { + trx.rollback(); + } + } + } + public final static String CONF_TEMPLATE_FILE_PATH = "amavisadmin.template.path"; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/UserBO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/UserBO.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/UserBO.java 2007-01-16 21:35:29 UTC (rev 18) @@ -215,7 +215,8 @@ Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR_OF_DAY, validUntil); - if (getNewRequest(user, cal)) { + req = getNewRequest(user, cal); + if (req.getParam2() == null) { context.put("reset", Boolean.FALSE); } else { context.put("reset", Boolean.TRUE); @@ -280,11 +281,11 @@ /** * look for existing requests */ - private static boolean getNewRequest(User user, Calendar cal) { + private static Request getNewRequest(User user, Calendar cal) { RequestDAO rDAO = new RequestDAO(); - Request req = new Request(); Date now = new Date(); Session session = HibernateSessionFactory.getSession(); + Request req = new Request(); req.setHandlerType(HANDLER_TYPE_LOST_PASSWORD); req.setStatus(RequestDAO.STATUS_ACTIVE); req.setParam1(user.getUsername()); @@ -325,13 +326,13 @@ req.setHandlerType(HANDLER_TYPE_LOST_PASSWORD); req.setParam1(user.getUsername()); session.save(req); - return true; + return req; } else { // update existing request req.setParam2("Updated where old expiration date was " + req.getExpirationDate().toString()); req.setExpirationDate(cal.getTime()); session.update(req); - return false; + return req; } } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractJob.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractJob.java 2007-01-16 21:35:29 UTC (rev 18) @@ -34,6 +34,17 @@ private Boolean enabled; private Date lastRun; private String cronSettings; + /** + * Holds value of property confItems. + */ + private Map confItems; + + /** + * Holds value of property specialPurpose. + */ + private Boolean specialPurpose; + + /** default constructor */ public AbstractJob() { @@ -96,11 +107,6 @@ } /** - * Holds value of property confItems. - */ - private Map confItems; - - /** * Getter for property confItems. * @return Value of property confItems. */ @@ -115,5 +121,28 @@ public void setConfItems(Map confItems) { this.confItems = confItems; } + + /** + * Getter for property specialPurpose. If this property is set, + * this job is executed at application startup if the field lastRun is null. + * + * Jobs defined here are not executed during regular job execution. + * + * If specialPurpose is set to true, the contents of field cronSettings + * are ignored. + * + * @return Value of property specialPurpose. + */ + public Boolean getSpecialPurpose() { + return this.specialPurpose; + } + + /** + * Setter for property specialPurpose. + * @param specialPurpose New value of property specialPurpose. + */ + public void setSpecialPurpose(Boolean specialPurpose) { + this.specialPurpose = specialPurpose; + } } \ No newline at end of file Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMessage.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMessage.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMessage.java 2007-01-16 21:35:29 UTC (rev 18) @@ -44,9 +44,9 @@ private String clientAddr; private Integer size; private Character content; - private String quarType; + private Character quarType; private String quarLoc; - private String dsnSent; + private Character dsnSent; private Double spamLevel; private String messageId; private String fromAddr; @@ -76,7 +76,7 @@ } /** full constructor */ - public AbstractMessage(String mailId, MailAddress maddr, String secretId, String amId, Integer timeNum, Date timeIso, String policy, String clientAddr, Integer size, Character content, String quarType, String quarLoc, String dsnSent, Double spamLevel, String messageId, String fromAddr, String subject, String host, Set msgrcpts, List quarantines) { + public AbstractMessage(String mailId, MailAddress maddr, String secretId, String amId, Integer timeNum, Date timeIso, String policy, String clientAddr, Integer size, Character content, Character quarType, String quarLoc, Character dsnSent, Double spamLevel, String messageId, String fromAddr, String subject, String host, Set msgrcpts, List quarantines) { this.mailId = mailId; this.maddr = maddr; this.secretId = secretId; @@ -182,11 +182,11 @@ this.content = content; } - public String getQuarType() { + public Character getQuarType() { return this.quarType; } - public void setQuarType(String quarType) { + public void setQuarType(Character quarType) { this.quarType = quarType; } @@ -198,11 +198,11 @@ this.quarLoc = quarLoc; } - public String getDsnSent() { + public Character getDsnSent() { return this.dsnSent; } - public void setDsnSent(String dsnSent) { + public void setDsnSent(Character dsnSent) { this.dsnSent = dsnSent; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMsgReceipient.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMsgReceipient.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractMsgReceipient.java 2007-01-16 21:35:29 UTC (rev 18) @@ -27,10 +27,10 @@ private MsgReceipientId id; private MailAddress maddr; private Message msgs; - private String ds; - private String rs; - private String bl; - private String wl; + private Character ds; + private Character rs; + private Character bl; + private Character wl; private Double bspamLevel; private String smtpResp; private Integer version; @@ -51,7 +51,7 @@ } /** minimal constructor */ - public AbstractMsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, String ds, String rs) { + public AbstractMsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, Character ds, Character rs) { this.id = id; this.maddr = maddr; this.msgs = msgs; @@ -60,7 +60,7 @@ } /** full constructor */ - public AbstractMsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, String ds, String rs, String bl, String wl, Double bspamLevel, String smtpResp) { + public AbstractMsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, Character ds, Character rs, Character bl, Character wl, Double bspamLevel, String smtpResp) { this.id = id; this.maddr = maddr; this.msgs = msgs; @@ -99,35 +99,35 @@ this.msgs = msgs; } - public String getDs() { + public Character getDs() { return this.ds; } - public void setDs(String ds) { + public void setDs(Character ds) { this.ds = ds; } - public String getRs() { + public Character getRs() { return this.rs; } - public void setRs(String rs) { + public void setRs(Character rs) { this.rs = rs; } - public String getBl() { + public Character getBl() { return this.bl; } - public void setBl(String bl) { + public void setBl(Character bl) { this.bl = bl; } - public String getWl() { + public Character getWl() { return this.wl; } - public void setWl(String wl) { + public void setWl(Character wl) { this.wl = wl; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractPolicy.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractPolicy.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractPolicy.java 2007-01-16 21:35:29 UTC (rev 18) @@ -28,15 +28,15 @@ private Integer id; private String policyName; - private String virusLover; - private String spamLover; - private String bannedFilesLover; - private String badHeaderLover; - private String bypassVirusChecks; - private String bypassSpamChecks; - private String bypassBannedChecks; - private String bypassHeaderChecks; - private String spamModifiesSubj; + private Character virusLover; + private Character spamLover; + private Character bannedFilesLover; + private Character badHeaderLover; + private Character bypassVirusChecks; + private Character bypassSpamChecks; + private Character bypassBannedChecks; + private Character bypassHeaderChecks; + private Character spamModifiesSubj; private String spamQuarantineTo; private Double spamTagLevel; private Double spamTag2Level; @@ -52,7 +52,7 @@ /** full constructor */ - public AbstractPolicy(String policyName, String virusLover, String spamLover, String bannedFilesLover, String badHeaderLover, String bypassVirusChecks, String bypassSpamChecks, String bypassBannedChecks, String bypassHeaderChecks, String spamModifiesSubj, String spamQuarantineTo, Double spamTagLevel, Double spamTag2Level, Double spamKillLevel) { + public AbstractPolicy(String policyName, Character virusLover, Character spamLover, Character bannedFilesLover, Character badHeaderLover, Character bypassVirusChecks, Character bypassSpamChecks, Character bypassBannedChecks, Character bypassHeaderChecks, Character spamModifiesSubj, String spamQuarantineTo, Double spamTagLevel, Double spamTag2Level, Double spamKillLevel) { this.policyName = policyName; this.virusLover = virusLover; this.spamLover = spamLover; @@ -88,75 +88,75 @@ this.policyName = policyName; } - public String getVirusLover() { + public Character getVirusLover() { return this.virusLover; } - public void setVirusLover(String virusLover) { + public void setVirusLover(Character virusLover) { this.virusLover = virusLover; } - public String getSpamLover() { + public Character getSpamLover() { return this.spamLover; } - public void setSpamLover(String spamLover) { + public void setSpamLover(Character spamLover) { this.spamLover = spamLover; } - public String getBannedFilesLover() { + public Character getBannedFilesLover() { return this.bannedFilesLover; } - public void setBannedFilesLover(String bannedFilesLover) { + public void setBannedFilesLover(Character bannedFilesLover) { this.bannedFilesLover = bannedFilesLover; } - public String getBadHeaderLover() { + public Character getBadHeaderLover() { return this.badHeaderLover; } - public void setBadHeaderLover(String badHeaderLover) { + public void setBadHeaderLover(Character badHeaderLover) { this.badHeaderLover = badHeaderLover; } - public String getBypassVirusChecks() { + public Character getBypassVirusChecks() { return this.bypassVirusChecks; } - public void setBypassVirusChecks(String bypassVirusChecks) { + public void setBypassVirusChecks(Character bypassVirusChecks) { this.bypassVirusChecks = bypassVirusChecks; } - public String getBypassSpamChecks() { + public Character getBypassSpamChecks() { return this.bypassSpamChecks; } - public void setBypassSpamChecks(String bypassSpamChecks) { + public void setBypassSpamChecks(Character bypassSpamChecks) { this.bypassSpamChecks = bypassSpamChecks; } - public String getBypassBannedChecks() { + public Character getBypassBannedChecks() { return this.bypassBannedChecks; } - public void setBypassBannedChecks(String bypassBannedChecks) { + public void setBypassBannedChecks(Character bypassBannedChecks) { this.bypassBannedChecks = bypassBannedChecks; } - public String getBypassHeaderChecks() { + public Character getBypassHeaderChecks() { return this.bypassHeaderChecks; } - public void setBypassHeaderChecks(String bypassHeaderChecks) { + public void setBypassHeaderChecks(Character bypassHeaderChecks) { this.bypassHeaderChecks = bypassHeaderChecks; } - public String getSpamModifiesSubj() { + public Character getSpamModifiesSubj() { return this.spamModifiesSubj; } - public void setSpamModifiesSubj(String spamModifiesSubj) { + public void setSpamModifiesSubj(Character spamModifiesSubj) { this.spamModifiesSubj = spamModifiesSubj; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-16 21:35:29 UTC (rev 18) @@ -28,6 +28,9 @@ <property name="description" column="job_description" type="java.lang.String" not-null="true" /> <property name="cronSettings" column="job_cron_settings" type="java.lang.String" not-null="true" length="30" /> <property name="jobClass" column="job_class" type="java.lang.Class" not-null="true" /> + <property name="specialPurpose" type="java.lang.Boolean" > + <column name="job_special" default="false" /> + </property> <property name="enabled" type="java.lang.Boolean" not-null="true"> <column name="job_enabled" default="false" /> </property> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/JobDAO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/JobDAO.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/JobDAO.java 2007-01-16 21:35:29 UTC (rev 18) @@ -39,8 +39,8 @@ public static final String CRON_SETTINGS = "cronSettings"; public static final String JOB_CLASS = "jobClass"; public static final String LAST_RUN = "lastRun"; + public static final String SPECIAL_PURPOSE = "specialPurpose"; - public void save(Job transientInstance) { log.debug("saving Job instance"); try { @@ -122,6 +122,10 @@ return findByProperty(CRON_SETTINGS, cronSettings); } + public List findBySpecialPurpose(Object specialPurpose) { + return findByProperty(SPECIAL_PURPOSE, specialPurpose); + } + public Job merge(Job detachedInstance) { log.debug("merging Job instance"); try { Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailAddressDAO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailAddressDAO.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailAddressDAO.java 2007-01-16 21:35:29 UTC (rev 18) @@ -15,12 +15,10 @@ */ package de.sreindl.amavisadmin.db; -import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.tools.ant.taskdefs.Java; import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.criterion.Example; @@ -163,7 +161,7 @@ * extracted *@return the reversed email address */ - public static String generateDomain (String email) throws IllegalArgumentException { + public static String generateDomain(String email) throws IllegalArgumentException { log.debug("generating reverse domain for " + email); int atSign = email.indexOf('@'); if (atSign < 0) { @@ -174,7 +172,7 @@ StringBuffer result = new StringBuffer(domainName.length()); for (int i = domainParts.length -1; i >= 0; i--) { result.append(domainParts[i]); - if (i > 0) + if (i > 0) result.append('.'); } if (log.isDebugEnabled()) { @@ -183,7 +181,7 @@ return result.toString(); } - public static String generateDomain (MailAddress ma) throws IllegalArgumentException { - return generateDomain (ma.getEmail()); + public static String generateDomain(MailAddress ma) throws IllegalArgumentException { + return generateDomain(ma.getEmail()); } } \ No newline at end of file Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.hbm.xml 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.hbm.xml 2007-01-16 21:35:29 UTC (rev 18) @@ -55,13 +55,13 @@ <property name="content" type="java.lang.Character"> <column name="content" /> </property> - <property name="quarType" type="java.lang.String"> + <property name="quarType" type="java.lang.Character"> <column name="quar_type" length="1" /> </property> <property name="quarLoc" type="java.lang.String"> <column name="quar_loc" /> </property> - <property name="dsnSent" type="java.lang.String"> + <property name="dsnSent" type="java.lang.Character"> <column name="dsn_sent" length="1" /> </property> <property name="spamLevel" type="java.lang.Double"> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Message.java 2007-01-16 21:35:29 UTC (rev 18) @@ -42,7 +42,7 @@ } /** full constructor */ - public Message(String mailId, MailAddress maddr, String secretId, String amId, Integer timeNum, Date timeIso, String policy, String clientAddr, Integer size, Character content, String quarType, String quarLoc, String dsnSent, Double spamLevel, String messageId, String fromAddr, String subject, String host, Set msgrcpts, List quarantines) { + public Message(String mailId, MailAddress maddr, String secretId, String amId, Integer timeNum, Date timeIso, String policy, String clientAddr, Integer size, Character content, Character quarType, String quarLoc, Character dsnSent, Double spamLevel, String messageId, String fromAddr, String subject, String host, Set msgrcpts, List quarantines) { super(mailId, maddr, secretId, amId, timeNum, timeIso, policy, clientAddr, size, content, quarType, quarLoc, dsnSent, spamLevel, messageId, fromAddr, subject, host, msgrcpts, quarantines); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.hbm.xml 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.hbm.xml 2007-01-16 21:35:29 UTC (rev 18) @@ -38,19 +38,19 @@ <many-to-one name="requestUser" class="de.sreindl.amavisadmin.db.User" fetch="select"> <column name="request_user" /> </many-to-one> - <property name="ds" type="java.lang.String"> + <property name="ds" type="java.lang.Character"> <column name="ds" length="1" not-null="true" /> </property> - <property name="rs" type="java.lang.String"> + <property name="rs" type="java.lang.Character"> <column name="rs" length="1" not-null="true" index="msgrcpt_ix_rs" /> </property> <property name="receipId" type="java.lang.Integer" insert="false" update="false"> <column name="rid" /> </property> - <property name="bl" type="java.lang.String"> + <property name="bl" type="java.lang.Character"> <column name="bl" length="1" /> </property> - <property name="wl" type="java.lang.String"> + <property name="wl" type="java.lang.Character"> <column name="wl" length="1" /> </property> <property name="bspamLevel" type="java.lang.Double"> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipient.java 2007-01-16 21:35:29 UTC (rev 18) @@ -34,12 +34,12 @@ } /** minimal constructor */ - public MsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, String ds, String rs) { + public MsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, Character ds, Character rs) { super(id, maddr, msgs, ds, rs); } /** full constructor */ - public MsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, String ds, String rs, String bl, String wl, Double bspamLevel, String smtpResp) { + public MsgReceipient(MsgReceipientId id, MailAddress maddr, Message msgs, Character ds, Character rs, Character bl, Character wl, Double bspamLevel, String smtpResp) { super(id, maddr, msgs, ds, rs, bl, wl, bspamLevel, smtpResp); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java 2007-01-16 21:35:29 UTC (rev 18) @@ -168,56 +168,56 @@ /** * Mail has not been reviewed. */ - public static final String RS_OPEN = " "; + public static final Character RS_OPEN = ' '; /** * Mail is pending to be released by an admin. * This value is set by the user during the release process. */ - public static final String RS_PENDING = "p"; + public static final Character RS_PENDING = 'p'; /** * Message is waiting to be sent to an admin for release. */ - public static final String RS_REL_PENDING = "P"; + public static final Character RS_REL_PENDING = 'P'; /** * Message has been released. */ - public static final String RS_RELEASED = "R"; + public static final Character RS_RELEASED = 'R'; /** * Message is marked for deletion */ - public static final String RS_DELETED = "D"; + public static final Character RS_DELETED = 'D'; /** * Message is marked as being read (not used) */ - public static final String RS_VIEWING = "V"; + public static final Character RS_VIEWING = 'V'; /** * Message is marked as waiting for release */ - public static final String RS_WAITING_FOR_RELEASE = "W"; + public static final Character RS_WAITING_FOR_RELEASE = 'W'; /* values for DS */ /** * Message has been passed through to the user */ - public static final String DS_PASSED = "P"; + public static final Character DS_PASSED = 'P'; /** * Message has not been delivered to the customer (SPAM) */ - public static final String DS_BLOCKED = "B"; + public static final Character DS_BLOCKED = 'B'; /** * Message has been deferred */ - public static final String DS_DEFERRED = "D"; + public static final Character DS_DEFERRED = 'D'; /** * Message has been temporary failed, need to be resend. */ - public static final String DS_TEMPFAIL = "T"; + public static final Character DS_TEMPFAIL = 'T'; /** * Message has been rejected */ Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.hbm.xml 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.hbm.xml 2007-01-16 21:35:29 UTC (rev 18) @@ -30,31 +30,31 @@ <property name="policyName" type="java.lang.String"> <column name="policy_name" length="32" /> </property> - <property name="virusLover" type="java.lang.String"> + <property name="virusLover" type="java.lang.Character"> <column name="virus_lover" length="1" /> </property> - <property name="spamLover" type="java.lang.String"> + <property name="spamLover" type="java.lang.Character"> <column name="spam_lover" length="1" /> </property> - <property name="bannedFilesLover" type="java.lang.String"> + <property name="bannedFilesLover" type="java.lang.Character"> <column name="banned_files_lover" length="1" /> </property> - <property name="badHeaderLover" type="java.lang.String"> + <property name="badHeaderLover" type="java.lang.Character"> <column name="bad_header_lover" length="1" /> </property> - <property name="bypassVirusChecks" type="java.lang.String"> + <property name="bypassVirusChecks" type="java.lang.Character"> <column name="bypass_virus_checks" length="1" /> </property> - <property name="bypassSpamChecks" type="java.lang.String"> + <property name="bypassSpamChecks" type="java.lang.Character"> <column name="bypass_spam_checks" length="1" /> </property> - <property name="bypassBannedChecks" type="java.lang.String"> + <property name="bypassBannedChecks" type="java.lang.Character"> <column name="bypass_banned_checks" length="1" /> </property> - <property name="bypassHeaderChecks" type="java.lang.String"> + <property name="bypassHeaderChecks" type="java.lang.Character"> <column name="bypass_header_checks" length="1" /> </property> - <property name="spamModifiesSubj" type="java.lang.String"> + <property name="spamModifiesSubj" type="java.lang.Character"> <column name="spam_modifies_subj" length="1" /> </property> <property name="spamQuarantineTo" type="java.lang.String"> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Policy.java 2007-01-16 21:35:29 UTC (rev 18) @@ -37,7 +37,7 @@ /** full constructor */ - public Policy(String policyName, String virusLover, String spamLover, String bannedFilesLover, String badHeaderLover, String bypassVirusChecks, String bypassSpamChecks, String bypassBannedChecks, String bypassHeaderChecks, String spamModifiesSubj, String spamQuarantineTo, Double spamTagLevel, Double spamTag2Level, Double spamKillLevel) { + public Policy(String policyName, Character virusLover, Character spamLover, Character bannedFilesLover, Character badHeaderLover, Character bypassVirusChecks, Character bypassSpamChecks, Character bypassBannedChecks, Character bypassHeaderChecks, Character spamModifiesSubj, String spamQuarantineTo, Double spamTagLevel, Double spamTag2Level, Double spamKillLevel) { super(policyName, virusLover, spamLover, bannedFilesLover, badHeaderLover, bypassVirusChecks, bypassSpamChecks, bypassBannedChecks, bypassHeaderChecks, spamModifiesSubj, spamQuarantineTo, spamTagLevel, spamTag2Level, spamKillLevel); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/BaseJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/BaseJob.java 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/BaseJob.java 2007-01-16 21:35:29 UTC (rev 18) @@ -187,7 +187,9 @@ /** - * disable and enable all jobs currently defined. + * Disable and enable all jobs currently defined. + * + * <p>Jobs which have the special purpose flag set are ignored here.</p> */ public static void scheduleJobs(StdSchedulerFactory factory) { JobDAO jDAO = new JobDAO(); @@ -197,17 +199,19 @@ Iterator i = jobs.iterator(); while (i.hasNext()) { de.sreindl.amavisadmin.db.Job dbJob = (de.sreindl.amavisadmin.db.Job)i.next(); - log.info("Starting job " + dbJob.getJobName()); - BaseJob newJob = null; - try { - newJob = (BaseJob)dbJob.getJobClass().newInstance(); - newJob.setData(dbJob); - } catch (ClassCastException cce) { - log.error("class " + dbJob.getJobClass().getName() + " is not a BaseJob class"); + if (!dbJob.getSpecialPurpose().booleanValue()) { + log.info("Starting job " + dbJob.getJobName()); + BaseJob newJob = null; + try { + newJob = (BaseJob)dbJob.getJobClass().newInstance(); + newJob.setData(dbJob); + } catch (ClassCastException cce) { + log.error("class " + dbJob.getJobClass().getName() + " is not a BaseJob class"); + } + if (newJob != null) { + newJob.scheduleJob(factory); + } } - if (newJob != null) { - newJob.scheduleJob(factory); - } } factory.getDefaultScheduler().start(); } catch (Exception e) { Modified: amavisadmin/trunk/src/java/log4j.properties =================================================================== --- amavisadmin/trunk/src/java/log4j.properties 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/src/java/log4j.properties 2007-01-16 21:35:29 UTC (rev 18) @@ -19,18 +19,18 @@ log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p: %c#%M %x: %m%n -log4j.logger.org.apache=WARN +log4j.logger.org.apache.jsp=DEBUG log4j.logger.org.hibernate=WARN log4j.logger.org.quartz=DEBUG #log4j.logger.org.apache.myfaces=DEBUG -log4j.logger.de.sreindl.spamadmin=DEBUG -#log4j.logger.de.sreindl.spamadmin=INFO -log4j.logger.de.sreindl.spamadmin.bo.ConfigurationBO=WARN +log4j.logger.de.sreindl.amavisadmin=DEBUG +#log4j.logger.de.sreindl.amavisadmin=INFO +log4j.logger.de.sreindl.amavisadmin.bo.ConfigurationBO=WARN #log4j.logger.org.hibernate.tool.hbm2ddl=INFO #log4j.logger.javax.faces=DEBUG #log4j.logger.com.sun.rave=DEBUG -#log4j.logger.org.velocity=TRACE \ No newline at end of file +#log4j.logger.org.velocity=TRACE Modified: amavisadmin/trunk/web/MyRequests.jsp =================================================================== --- amavisadmin/trunk/web/MyRequests.jsp 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/web/MyRequests.jsp 2007-01-16 21:35:29 UTC (rev 18) @@ -20,7 +20,7 @@ style="left: 311px; top: 144px; position: absolute; width: 144px" text="Delete Selected"/> <ui:table binding="#{MyRequests.table1}" deselectMultipleButton="true" id="table1" lite="true" paginateButton="true" paginationControls="true" selectMultipleButton="true" sortPanelToggleButton="true" - style="left: 24px; top: 192px; position: absolute; width: 840px" title="My SPAM/Virus Mails" width="632"> + style="left: 24px; top: 192px; position: absolute; width: 840px" title="My SPAM/Virus Mails"> <script><![CDATA[ /* ----- Functions for Table Preferences Panel ----- */ /* Modified: amavisadmin/trunk/web/UserManagement.jsp =================================================================== --- amavisadmin/trunk/web/UserManagement.jsp 2007-01-15 22:42:46 UTC (rev 17) +++ amavisadmin/trunk/web/UserManagement.jsp 2007-01-16 21:35:29 UTC (rev 18) @@ -13,7 +13,7 @@ </div> <ui:form binding="#{UserManagement.form1}" id="form1"> <ui:panelGroup binding="#{UserManagement.groupPanel1}" id="groupPanel1"> - <ui:button action="editSingleUser" binding="#{UserManagement.btnAdd}" id="btnAdd" text="Add new User"/> + <ui:button action="#{UserManagement.btnAdd_action}" binding="#{UserManagement.btnAdd}" id="btnAdd" text="Add new User"/> </ui:panelGroup> <ui:panelGroup binding="#{UserManagement.groupPanel2}" block="true" id="groupPanel2" style="margin-left: 5px"> <ui:table binding="#{UserManagement.table1}" id="table1" title="User Table"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-17 17:46:03
|
Revision: 19 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=19&view=rev Author: streindl Date: 2007-01-17 09:45:57 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Fix for #1637138: * Handle logging Modified Paths: -------------- amavisadmin/trunk/nbproject/private/private.properties amavisadmin/trunk/src/java/log4j.properties Modified: amavisadmin/trunk/nbproject/private/private.properties =================================================================== --- amavisadmin/trunk/nbproject/private/private.properties 2007-01-16 21:35:29 UTC (rev 18) +++ amavisadmin/trunk/nbproject/private/private.properties 2007-01-17 17:45:57 UTC (rev 19) @@ -1,5 +1,5 @@ deploy.ant.properties.file=/home/sreindl/.netbeans/5.5/tomcat55_1.properties -j2ee.platform.classpath=/opt/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler-jdt.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/apache-tomcat-5.5.17/common/lib/servlet-api.jar +j2ee.platform.classpath=/opt/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler-jdt.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-logging.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/apache-tomcat-5.5.17/common/lib/log4j-1.2.11.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/apache-tomcat-5.5.17/common/lib/servlet-api.jar j2ee.server.instance=tomcat55:home=/opt/apache-tomcat-5.5.17 javac.debug=true javadoc.preview=true Modified: amavisadmin/trunk/src/java/log4j.properties =================================================================== --- amavisadmin/trunk/src/java/log4j.properties 2007-01-16 21:35:29 UTC (rev 18) +++ amavisadmin/trunk/src/java/log4j.properties 2007-01-17 17:45:57 UTC (rev 19) @@ -21,9 +21,13 @@ log4j.logger.org.apache.jsp=DEBUG -log4j.logger.org.hibernate=WARN -log4j.logger.org.quartz=DEBUG +log4j.logger.org.hibernate=INFO +log4j.logger.org.quartz=INFO +# #1637138: Enable output of debug messages +log4j.logger.org.apache.catalina.core.ContainerBase=DEBUG +#log4j.logger.org.apache.catalina.core.ContainerBase=INFO + #log4j.logger.org.apache.myfaces=DEBUG log4j.logger.de.sreindl.amavisadmin=DEBUG This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-17 18:37:40
|
Revision: 21 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=21&view=rev Author: streindl Date: 2007-01-17 10:27:34 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Migration job handling and first job for initial migration Modified Paths: -------------- amavisadmin/trunk/tools/reposInfo.pl Added Paths: ----------- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrateV0toV1.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrationJob.java Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrateV0toV1.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrateV0toV1.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrateV0toV1.java 2007-01-17 18:27:34 UTC (rev 21) @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2007 Stephen Reindl + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* + * MigrateV0toV1.java + * + * Created on 16. Januar 2007, 19:24 + * + */ + +package de.sreindl.amavisadmin.migration; + +import de.sreindl.amavisadmin.db.MailAddress; +import de.sreindl.amavisadmin.db.MailAddressDAO; +import de.sreindl.amavisadmin.db.User; +import de.sreindl.amavisadmin.db.UserDAO; +import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; +import java.util.Iterator; +import java.util.List; +import javax.swing.text.rtf.RTFEditorKit; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.Transaction; + +/** + * The following activities are performed here: + *<ul> + *<li> Create default user if not already there </li> + *<li> Update table maddr table to include the user email addresses of + * the already registered users (if any).</li> + *</ul> + * @author sreindl + */ +public class MigrateV0toV1 implements MigrationJob { + + private static Log log = LogFactory.getLog(MigrateV0toV1.class); + + /** Creates a new instance of MigrateV0toV1 */ + public MigrateV0toV1() { + } + + /** + * Perform Migration + */ + public void migrate() throws Exception { + log.info("Migrate from DB Version 0 to DB Version 1"); + migrateUsers(); + addDefaultUser(); + log.info("Job migration successfully performed"); + } + + private void migrateUsers() { + MailAddressDAO dao = new MailAddressDAO(); + MailAddress entry = null; + Session session = HibernateSessionFactory.getSession(); + Query qry = session.createQuery("from User"); + Iterator i = qry.iterate(); + while (i.hasNext()) { + User user = (User)i.next(); + if (user.getEmail() == null || user.getEmail().equals(defaultUserEmail)) { + continue; // skip + } + entry = dao.findByEmail(user.getEmail()); + if (entry == null) { + log.info("New entry for user " + user.getUsername()); + // add new entry + entry = new MailAddress(user.getEmail(), + MailAddressDAO.generateDomain(user.getEmail())); + entry.setUser(user); + session.save(entry); + } else if (entry.getUser() != null && entry.getUser().equals(user)) { + log.info("Mail Entry for user " + user.getUsername() + " already exists"); + } else { + log.info("Mail Entry for user " + user.getUsername() + " updated."); + // update existing + entry.setUser(user); + session.update(entry); + } + } + } + + private void addDefaultUser() { + UserDAO dao = new UserDAO(); + MailAddress entry = null; + List ent = dao.findByEmail(defaultUserEmail); + if (ent.size() > 0) { + // already there -> ok + return; + } + log.info ("Adding default user"); + // add new default entry + Session session = HibernateSessionFactory.getSession(); + User user = new User(1, 1, defaultUserEmail, "Global Match", null, "", 0, "", false); + session.save(user); + } + + /** + * Default match + */ + private static final String defaultUserEmail = "@."; +} Property changes on: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrateV0toV1.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrationJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrationJob.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrationJob.java 2007-01-17 18:27:34 UTC (rev 21) @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2007 Stephen Reindl + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* + * MigrationJob.java + * + * Created on 16. Januar 2007, 19:29 + */ + +package de.sreindl.amavisadmin.migration; + +/** + * Interface that is used to describe jobs that need to be started during + * database migration. + * + * @author sreindl + */ +public interface MigrationJob { + /** + * Migration job. + */ + public void migrate() throws Exception; +} Property changes on: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/migration/MigrationJob.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: amavisadmin/trunk/tools/reposInfo.pl =================================================================== --- amavisadmin/trunk/tools/reposInfo.pl 2007-01-17 18:23:00 UTC (rev 20) +++ amavisadmin/trunk/tools/reposInfo.pl 2007-01-17 18:27:34 UTC (rev 21) @@ -19,12 +19,14 @@ use SVK::XD; use Cwd; + my $op = shift; +my $_info = undef; # use svn info -my $funcRev = sub { +sub funcRev { my( $path, $info, $pool ) = @_; - print $info->rev; + $_info = $info; }; my $statusChanged = 0; @@ -35,7 +37,8 @@ my $ctx = SVN::Client->new(); if ($op eq "REV") { - $ctx->info( 'build.xml', undef, undef, $funcRev, 0 ); + $ctx->info( 'build.xml', undef, undef, \&funcRev, 0 ); + print $_info->rev; } elsif ($op eq "STATUS") { $ctx->status(getcwd(), undef, $funcStatus, 1, 0, 0, 0); if ($statusChanged) { @@ -51,4 +54,13 @@ print "BUILD"; } } elsif ($op eq "TAG") { + $ctx->info( 'build.xml', undef, undef, \&funcRev, 0 ); + my $url = $_info->URL; + if ($url =~ /trunk/) { + print "trunk"; + } elsif ($url =~ /branches\/([^\/]+)\//) { + print "branch $1"; + } elsif ($url =~ /tags\/([^\/]+)\//) { + print "tag $1"; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-17 21:21:13
|
Revision: 23 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=23&view=rev Author: streindl Date: 2007-01-17 13:21:14 -0800 (Wed, 17 Jan 2007) Log Message: ----------- * Bug 1638044: - Version number handling improved - All web pages contain a footer now (except the maintenance HTML page) * Fix for bug #1638043. Modified Paths: -------------- amavisadmin/trunk/build.xml amavisadmin/trunk/nbproject/private/private.properties amavisadmin/trunk/src/java/amavisadmin.properties.in amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApplicationBean1.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Configuration.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Header.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java amavisadmin/trunk/tools/reposInfo.pl amavisadmin/trunk/web/ApproveRequests.jsp amavisadmin/trunk/web/ChangePassword.jsp amavisadmin/trunk/web/Configuration.jsp amavisadmin/trunk/web/EditJobs.jsp amavisadmin/trunk/web/EditSingleJob.jsp amavisadmin/trunk/web/EditUser.jsp amavisadmin/trunk/web/HandlePendingReleases.jsp amavisadmin/trunk/web/Header.jspf amavisadmin/trunk/web/Login.jsp amavisadmin/trunk/web/MyRequests.jsp amavisadmin/trunk/web/ShowSingleMail.jsp amavisadmin/trunk/web/UserManagement.jsp amavisadmin/trunk/web/WEB-INF/managed-beans.xml Added Paths: ----------- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Footer.java amavisadmin/trunk/web/Footer.jspf Modified: amavisadmin/trunk/build.xml =================================================================== --- amavisadmin/trunk/build.xml 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/build.xml 2007-01-17 21:21:14 UTC (rev 23) @@ -78,19 +78,25 @@ </schemaexport> </target>--> - <target name="-post-init"> - <tstamp > + <!-- Build amavisadmin.properties for build and version information --> + <target name="-post-compile"> + <tstamp> <format property="build.timestamp" - pattern="EEE, d MMM yyyy HH:mm:ss Z" locale="en"/> + pattern="yyyyMMdd'T'HHmmssZ" locale="en"/> </tstamp> + <exec executable="/usr/bin/perl"> + <arg value="tools/reposInfo.pl" /> + <redirector output="reposinfo.properties" /> + </exec> <copy file="${src.dir}/amavisadmin.properties.in" - tofile="${src.dir}/amavisadmin.properties" + tofile="${build.classes.dir}/amavisadmin.properties" filtering="true" overwrite="true"> <filterset> - <filter token="VERSION" value="VERSION"/> + <filtersfile file="reposinfo.properties" /> <filter token="TSTAMP" value="${build.timestamp}" /> </filterset> </copy> + <delete file="reposinfo.properties" /> </target> <target name="-pre-dist"> Modified: amavisadmin/trunk/nbproject/private/private.properties =================================================================== --- amavisadmin/trunk/nbproject/private/private.properties 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/nbproject/private/private.properties 2007-01-17 21:21:14 UTC (rev 23) @@ -1,5 +1,5 @@ deploy.ant.properties.file=/home/sreindl/.netbeans/5.5/tomcat55_1.properties -j2ee.platform.classpath=/opt/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler-jdt.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-logging.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/apache-tomcat-5.5.17/common/lib/log4j-1.2.11.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/apache-tomcat-5.5.17/common/lib/servlet-api.jar +j2ee.platform.classpath=/opt/apache-tomcat-5.5.17/common/lib/naming-factory.jar:/opt/apache-tomcat-5.5.17/common/lib/jsp-api.jar:/opt/apache-tomcat-5.5.17/common/lib/postgresql-8.1-404.jdbc3.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-runtime.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-el.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler-jdt.jar:/opt/apache-tomcat-5.5.17/common/lib/commons-logging.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-factory-dbcp.jar:/opt/apache-tomcat-5.5.17/common/lib/jasper-compiler.jar:/opt/apache-tomcat-5.5.17/common/lib/naming-resources.jar:/opt/apache-tomcat-5.5.17/common/lib/servlet-api.jar j2ee.server.instance=tomcat55:home=/opt/apache-tomcat-5.5.17 javac.debug=true javadoc.preview=true Modified: amavisadmin/trunk/src/java/amavisadmin.properties.in =================================================================== --- amavisadmin/trunk/src/java/amavisadmin.properties.in 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/amavisadmin.properties.in 2007-01-17 21:21:14 UTC (rev 23) @@ -18,5 +18,18 @@ # AmavisAdmin properties file # This file contains basic settings -amavisadmin.version = @VERSION@ +amavisadmin.major = 0 +amavisadmin.minor = 1 + +# those fields are translated automatically +amavisadmin.branch = @branch@ +amavisadmin.build = @revision@ +amavisadmin.build_type = @build_type@ +amavisadmin.clean_build = @clean_build@ + +# If you ever change the datamodel, please increase this value +# and provide an upgrade script in the db topic +amavisadmin.db_version = 1 + +# Build time amavisadmin.buildtime = @TSTAMP@ Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApplicationBean1.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApplicationBean1.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApplicationBean1.java 2007-01-17 21:21:14 UTC (rev 23) @@ -16,6 +16,7 @@ package de.sreindl.amavisadmin; import com.sun.rave.web.ui.appbase.AbstractApplicationBean; +import de.sreindl.amavisadmin.bo.ConfigurationBO; import de.sreindl.amavisadmin.db.User; import java.util.HashSet; import java.util.Set; @@ -156,4 +157,14 @@ public synchronized static boolean isLoggedOn (User user) { return (userMap != null) && userMap.contains(user.getId()); } + + + public String getApplicationTitle() { + String appTitle = ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE); + if (appTitle == null || appTitle.length() == 0) { + appTitle = "AmavisAdmin"; + } + return appTitle; + } + } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java 2007-01-17 21:21:14 UTC (rev 23) @@ -25,6 +25,7 @@ import com.sun.rave.web.ui.component.Hyperlink; import com.sun.rave.web.ui.component.Link; import com.sun.rave.web.ui.component.Page; +import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; import com.sun.rave.web.ui.component.Table; import com.sun.rave.web.ui.component.TableColumn; @@ -287,6 +288,16 @@ public void setBtnBack(Button b) { this.btnBack = b; } + + private PanelGroup groupPanel1 = new PanelGroup(); + + public PanelGroup getGroupPanel1() { + return groupPanel1; + } + + public void setGroupPanel1(PanelGroup pg) { + this.groupPanel1 = pg; + } // </editor-fold> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Configuration.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Configuration.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Configuration.java 2007-01-17 21:21:14 UTC (rev 23) @@ -28,6 +28,7 @@ import de.sreindl.amavisadmin.bo.UserBO; import de.sreindl.amavisadmin.db.User; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; +import de.sreindl.amavisadmin.jobs.ReminderJob; import java.text.ParseException; import java.util.Date; import javax.faces.FacesException; @@ -506,26 +507,6 @@ this.longRangeValidator3 = lrv; } - private Property property20 = new Property(); - - public Property getProperty20() { - return property20; - } - - public void setProperty20(Property p) { - this.property20 = p; - } - - private TextField fldRetentionWarning = new TextField(); - - public TextField getFldRetentionWarning() { - return fldRetentionWarning; - } - - public void setFldRetentionWarning(TextField tf) { - this.fldRetentionWarning = tf; - } - private LongRangeValidator longRangeValidator4 = new LongRangeValidator(); public LongRangeValidator getLongRangeValidator4() { @@ -762,11 +743,10 @@ chkDropMail.setValue(Boolean.valueOf(ConfigurationBO.getConfValue(MailHandler.KEY_DROP_MAIL, ""))); /* general settings */ - fldApplicationTitle.setText(ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); - fldRetentionDays.setText(ConfigurationBO.getConfValue(UserBO.CONF_DEFAULT_RETENTION)); - fldMaxRetention.setText(ConfigurationBO.getConfValue(UserManagement.CONF_MAX_RETENTION)); + fldApplicationTitle.setText(ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE, "AmavisAdmin")); + fldRetentionDays.setText(ConfigurationBO.getConfValue(UserBO.CONF_DEFAULT_RETENTION, "14")); + fldMaxRetention.setText(ConfigurationBO.getConfValue(UserManagement.CONF_MAX_RETENTION, "365")); fldBaseURL.setText(ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL)); - //fldRetentionWarning.setText(ConfigurationBO.getConfValue()); } /** Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java 2007-01-17 21:21:14 UTC (rev 23) @@ -25,6 +25,7 @@ import com.sun.rave.web.ui.component.Hyperlink; import com.sun.rave.web.ui.component.Link; import com.sun.rave.web.ui.component.Page; +import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; import com.sun.rave.web.ui.component.Table; import com.sun.rave.web.ui.component.TableColumn; @@ -283,6 +284,26 @@ public void setBtnDeleteJob(Button b) { this.btnDeleteJob = b; } + + private PanelGroup groupPanel1 = new PanelGroup(); + + public PanelGroup getGroupPanel1() { + return groupPanel1; + } + + public void setGroupPanel1(PanelGroup pg) { + this.groupPanel1 = pg; + } + + private PanelGroup groupPanel2 = new PanelGroup(); + + public PanelGroup getGroupPanel2() { + return groupPanel2; + } + + public void setGroupPanel2(PanelGroup pg) { + this.groupPanel2 = pg; + } // </editor-fold> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-17 21:21:14 UTC (rev 23) @@ -29,6 +29,7 @@ import com.sun.rave.web.ui.component.Link; import com.sun.rave.web.ui.component.Message; import com.sun.rave.web.ui.component.Page; +import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; import com.sun.rave.web.ui.component.Table; import com.sun.rave.web.ui.component.TableColumn; @@ -376,6 +377,26 @@ public void setMessage1(Message m) { this.message1 = m; } + + private PanelGroup groupPanel1 = new PanelGroup(); + + public PanelGroup getGroupPanel1() { + return groupPanel1; + } + + public void setGroupPanel1(PanelGroup pg) { + this.groupPanel1 = pg; + } + + private PanelGroup groupPanel2 = new PanelGroup(); + + public PanelGroup getGroupPanel2() { + return groupPanel2; + } + + public void setGroupPanel2(PanelGroup pg) { + this.groupPanel2 = pg; + } // </editor-fold> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditUser.java 2007-01-17 21:21:14 UTC (rev 23) @@ -22,6 +22,7 @@ import com.sun.rave.web.ui.component.DropDown; import com.sun.rave.web.ui.component.Form; import com.sun.rave.web.ui.component.Head; +import com.sun.rave.web.ui.component.HiddenField; import com.sun.rave.web.ui.component.Html; import com.sun.rave.web.ui.component.Label; import com.sun.rave.web.ui.component.Link; @@ -382,6 +383,56 @@ public void setGroupPanel1(PanelGroup pg) { this.groupPanel1 = pg; } + + private HtmlPanelGrid gridPanel2 = new HtmlPanelGrid(); + + public HtmlPanelGrid getGridPanel2() { + return gridPanel2; + } + + public void setGridPanel2(HtmlPanelGrid hpg) { + this.gridPanel2 = hpg; + } + + private HtmlPanelGrid gridPanel3 = new HtmlPanelGrid(); + + public HtmlPanelGrid getGridPanel3() { + return gridPanel3; + } + + public void setGridPanel3(HtmlPanelGrid hpg) { + this.gridPanel3 = hpg; + } + + private HtmlPanelGrid gridPanel4 = new HtmlPanelGrid(); + + public HtmlPanelGrid getGridPanel4() { + return gridPanel4; + } + + public void setGridPanel4(HtmlPanelGrid hpg) { + this.gridPanel4 = hpg; + } + + private HiddenField hiddenField1 = new HiddenField(); + + public HiddenField getHiddenField1() { + return hiddenField1; + } + + public void setHiddenField1(HiddenField hf) { + this.hiddenField1 = hf; + } + + private PanelGroup groupPanel2 = new PanelGroup(); + + public PanelGroup getGroupPanel2() { + return groupPanel2; + } + + public void setGroupPanel2(PanelGroup pg) { + this.groupPanel2 = pg; + } // </editor-fold> @@ -404,6 +455,7 @@ * property values that were saved for this view when it was rendered.</p> */ public void init() { + log("init called"); // Perform initializations inherited from our superclass super.init(); // Perform application initialization that must complete @@ -467,6 +519,7 @@ * resources that will be required in your event handlers.</p> */ public void preprocess() { + log("Preprocess called"); } /** @@ -478,6 +531,7 @@ * this page.</p> */ public void prerender() { + log("Prerender Called"); ArrayList<Option> lst = null; if (user == null) { erase(); Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Footer.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Footer.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Footer.java 2007-01-17 21:21:14 UTC (rev 23) @@ -0,0 +1,140 @@ +/* + * Footer.java + * + * Created on 17. Januar 2007, 19:43 + * Copyright sreindl + */ +package de.sreindl.amavisadmin; + +import com.sun.rave.web.ui.appbase.AbstractFragmentBean; +import com.sun.rave.web.ui.component.Hyperlink; +import com.sun.rave.web.ui.component.Markup; +import com.sun.rave.web.ui.component.PageSeparator; +import com.sun.rave.web.ui.component.StaticText; +import de.sreindl.amavisadmin.bo.VersionInfo; +import javax.faces.FacesException; + +/** + * <p>Fragment bean that corresponds to a similarly named JSP page + * fragment. This class contains component definitions (and initialization + * code) for all components that you have defined on this fragment, as well as + * lifecycle methods and event handlers where you may add behavior + * to respond to incoming events.</p> + */ +public class Footer extends AbstractFragmentBean { + // <editor-fold defaultstate="collapsed" desc="Managed Component Definition"> + private int __placeholder; + + /** + * <p>Automatically managed component initialization. <strong>WARNING:</strong> + * This method is automatically generated, so any user-specified code inserted + * here is subject to being replaced.</p> + */ + private void _init() throws Exception { + } + + private PageSeparator pageSeparator1 = new PageSeparator(); + + public PageSeparator getPageSeparator1() { + return pageSeparator1; + } + + public void setPageSeparator1(PageSeparator ps) { + this.pageSeparator1 = ps; + } + + private StaticText staticText1 = new StaticText(); + + public StaticText getStaticText1() { + return staticText1; + } + + public void setStaticText1(StaticText st) { + this.staticText1 = st; + } + + private Hyperlink hyperlink1 = new Hyperlink(); + + public Hyperlink getHyperlink1() { + return hyperlink1; + } + + public void setHyperlink1(Hyperlink h) { + this.hyperlink1 = h; + } + // </editor-fold> + + public Footer() { + } + + /** + * <p>Callback method that is called whenever a page containing + * this page fragment is navigated to, either directly via a URL, + * or indirectly via page navigation. Override this method to acquire + * resources that will be needed for event handlers and lifecycle methods.</p> + * + * <p>The default implementation does nothing.</p> + */ + public void init() { + // Perform initializations inherited from our superclass + super.init(); + // Perform application initialization that must complete + // *before* managed components are initialized + // TODO - add your own initialiation code here + + + // <editor-fold defaultstate="collapsed" desc="Visual-Web-managed Component Initialization"> + // Initialize automatically managed components + // *Note* - this logic should NOT be modified + try { + _init(); + } catch (Exception e) { + log("Page1 Initialization Failure", e); + throw e instanceof FacesException ? (FacesException) e: new FacesException(e); + } + + // </editor-fold> + // Perform application initialization that must complete + // *after* managed components are initialized + // TODO - add your own initialization code here + } + + /** + * <p>Callback method that is called after rendering is completed for + * this request, if <code>init()</code> was called. Override this + * method to release resources acquired in the <code>init()</code> + * resources that will be needed for event handlers and lifecycle methods.</p> + * + * <p>The default implementation does nothing.</p> + */ + public void destroy() { + } + + /** + * <p>Return a reference to the scoped data bean.</p> + */ + protected ApplicationBean1 getApplicationBean1() { + return (ApplicationBean1)getBean("ApplicationBean1"); + } + + /** + * <p>Return a reference to the scoped data bean.</p> + */ + protected SessionBean1 getSessionBean1() { + return (SessionBean1)getBean("SessionBean1"); + } + + /** + * <p>Return a reference to the scoped data bean.</p> + */ + protected RequestBean1 getRequestBean1() { + return (RequestBean1)getBean("RequestBean1"); + } + + /** + * Return a versioned string + */ + public String getVersionString () { + return VersionInfo.getApplicationVersion(); + } +} Property changes on: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Footer.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java 2007-01-17 21:21:14 UTC (rev 23) @@ -25,6 +25,7 @@ import com.sun.rave.web.ui.component.Html; import com.sun.rave.web.ui.component.Link; import com.sun.rave.web.ui.component.Page; +import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; import com.sun.rave.web.ui.component.Table; import com.sun.rave.web.ui.component.TableColumn; @@ -241,6 +242,16 @@ public void setBtnRevert(Button b) { this.btnRevert = b; } + + private PanelGroup groupPanel1 = new PanelGroup(); + + public PanelGroup getGroupPanel1() { + return groupPanel1; + } + + public void setGroupPanel1(PanelGroup pg) { + this.groupPanel1 = pg; + } // </editor-fold> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Header.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Header.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/Header.java 2007-01-17 21:21:14 UTC (rev 23) @@ -21,6 +21,7 @@ import com.sun.rave.web.ui.component.MessageGroup; import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; +import de.sreindl.amavisadmin.bo.ConfigurationBO; import de.sreindl.amavisadmin.bo.UserBO; import javax.faces.FacesException; import javax.faces.component.html.HtmlPanelGrid; @@ -256,4 +257,5 @@ UserBO.logoutUser (getSessionBean1()); return "logout"; } + } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-17 21:21:14 UTC (rev 23) @@ -28,6 +28,7 @@ import com.sun.rave.web.ui.component.Hyperlink; import com.sun.rave.web.ui.component.Link; import com.sun.rave.web.ui.component.Page; +import com.sun.rave.web.ui.component.PanelGroup; import com.sun.rave.web.ui.component.StaticText; import com.sun.rave.web.ui.component.Table; import com.sun.rave.web.ui.component.TableColumn; @@ -295,6 +296,26 @@ public void setTextPending(StaticText st) { this.textPending = st; } + + private PanelGroup groupPanel1 = new PanelGroup(); + + public PanelGroup getGroupPanel1() { + return groupPanel1; + } + + public void setGroupPanel1(PanelGroup pg) { + this.groupPanel1 = pg; + } + + private PanelGroup groupPanel2 = new PanelGroup(); + + public PanelGroup getGroupPanel2() { + return groupPanel2; + } + + public void setGroupPanel2(PanelGroup pg) { + this.groupPanel2 = pg; + } // </editor-fold> @@ -691,6 +712,8 @@ return "There is one request pending for approval by an admin"; } else if (pending > 1) { return "There are " + pending + " requests pending for approval by an admin"; + } else if (pending == 0) { // #1638043 + return ""; } else { return "Error: The number of pending requests for approval cannot be calculated."; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/UserManagement.java 2007-01-17 21:21:14 UTC (rev 23) @@ -265,16 +265,6 @@ this.hyperlink1 = h; } - private PanelGroup groupPanel1 = new PanelGroup(); - - public PanelGroup getGroupPanel1() { - return groupPanel1; - } - - public void setGroupPanel1(PanelGroup pg) { - this.groupPanel1 = pg; - } - private Button btnAdd = new Button(); public Button getBtnAdd() { Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java 2007-01-17 21:21:14 UTC (rev 23) @@ -30,7 +30,9 @@ private static Log log = LogFactory.getLog(VersionInfo.class); - private static final Integer databaseVersion = 1; + private static Integer _databaseVersion = null; + + private static String _localVersion = null; /** Creates a new instance of VersionInfo */ public VersionInfo() { @@ -42,7 +44,11 @@ * @return the database version */ public static Integer getDatabaseVersion() { - return databaseVersion; + if (_databaseVersion == null) { + initProps(); + _databaseVersion = Integer.decode(props.getProperty("amavisadmin.db_version")); + } + return _databaseVersion; } /** @@ -59,12 +65,12 @@ } try { Integer numVersion = Integer.decode(db_version); - if (numVersion.equals(databaseVersion)) { + if (numVersion.equals(getDatabaseVersion())) { log.info("Database configuration is ok"); return true; } else { log.fatal("Database version mismatch: Version given " + - db_version + ", Version required " + databaseVersion); + db_version + ", Version required " + getDatabaseVersion()); return false; } } catch (NumberFormatException nfe) { @@ -76,8 +82,32 @@ } public static String getApplicationVersion() { - initProps(); - return props.getProperty("amavisadmin.version"); + if (_localVersion == null) { + initProps(); + StringBuffer str = new StringBuffer(20); + str.append(props.getProperty("amavisadmin.major", "Unknown")); + str.append('.'); + str.append(props.getProperty("amavisadmin.minor", "unknown")); + + String buildType = props.getProperty("amavisadmin.build_type"); + if (buildType.equals("local")) { + str.append (" local"); + } + str.append (" build "); + str.append (props.getProperty("amavisadmin.build")); + str.append (" ("); + String branch = props.getProperty("amavisadmin.branch"); + if (!(branch.startsWith("branch") || branch.startsWith("trunk"))) { + str.append ("release "); + } + str.append(branch); + if (props.getProperty("amavisadmin.clean_build").equals("false")) { + str.append (" -- <b>MODIFIED!</b>"); + } + str.append (')'); + _localVersion = str.toString(); + } + return _localVersion; } synchronized private static void initProps() { Modified: amavisadmin/trunk/tools/reposInfo.pl =================================================================== --- amavisadmin/trunk/tools/reposInfo.pl 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/tools/reposInfo.pl 2007-01-17 21:21:14 UTC (rev 23) @@ -36,31 +36,23 @@ }; my $ctx = SVN::Client->new(); -if ($op eq "REV") { - $ctx->info( 'build.xml', undef, undef, \&funcRev, 0 ); - print $_info->rev; -} elsif ($op eq "STATUS") { - $ctx->status(getcwd(), undef, $funcStatus, 1, 0, 0, 0); - if ($statusChanged) { - print "CHANGED"; - } else { - print "UNCHANGED"; - } -} elsif ($op eq "BUILD") { - my $cwd = getcwd(); - if ($cwd =~ /\/home\//) { - print "LOCAL"; - } else { - print "BUILD"; - } -} elsif ($op eq "TAG") { - $ctx->info( 'build.xml', undef, undef, \&funcRev, 0 ); - my $url = $_info->URL; - if ($url =~ /trunk/) { - print "trunk"; - } elsif ($url =~ /branches\/([^\/]+)\//) { - print "branch $1"; - } elsif ($url =~ /tags\/([^\/]+)\//) { - print "tag $1"; - } + +my $cwd = getcwd(); +$ctx->info( $cwd, undef, undef, \&funcRev, 0 ); +$ctx->status( $cwd, undef, $funcStatus, 1, 0, 0, 0); +print "revision=", $_info->rev, "\n"; +print "clean_build=", $statusChanged ? "false" : "true", "\n"; +if ($cwd =~ /\/home\//) { + print "build_type=private\n"; +} else { + print "build_type=batch\n"; } + +my $url = $_info->URL; +if ($url =~ /trunk/) { + print "branch=trunk\n"; +} elsif ($url =~ /branches\/([^\/]+)\//) { + print "branch=branch $1\n"; +} elsif ($url =~ /tags\/([^\/]+)\//) { + print "branch=$1\n"; +} Modified: amavisadmin/trunk/web/ApproveRequests.jsp =================================================================== --- amavisadmin/trunk/web/ApproveRequests.jsp 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/web/ApproveRequests.jsp 2007-01-17 21:21:14 UTC (rev 23) @@ -7,37 +7,37 @@ <ui:head binding="#{ApproveRequests.head1}" id="head1" title="Approve Requests"> <ui:link binding="#{ApproveRequests.link1}" id="link1" url="/resources/stylesheet.css"/> </ui:head> - <ui:body binding="#{ApproveRequests.body1}" id="body1" style="-rave-layout: grid"> + <ui:body binding="#{ApproveRequests.body1}" id="body1"> <ui:form binding="#{ApproveRequests.form1}" id="form1"> - <div style="left: 0px; top: 0px; position: absolute"> - <jsp:directive.include file="Header.jspf"/> - </div> - <ui:table augmentTitle="false" binding="#{ApproveRequests.table1}" id="table1" - style="left: 24px; top: 216px; position: absolute; width: 720px" title="Table" width="720"> - <ui:tableRowGroup binding="#{ApproveRequests.tableRowGroup1}" id="tableRowGroup1" rows="10" - sourceData="#{SessionBean1.approvePendingDataProvider}" sourceVar="currentRow"> - <ui:tableColumn binding="#{ApproveRequests.tableColumn1}" headerText="Received On" id="tableColumn1" sort="time_iso"> - <ui:staticText binding="#{ApproveRequests.staticText1}" id="staticText1" text="#{currentRow.value['time_iso']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{ApproveRequests.tableColumn2}" headerText="Requestor" id="tableColumn2" noWrap="true" sort="approve_username"> - <ui:staticText binding="#{ApproveRequests.staticText2}" id="staticText2" text="#{currentRow.value['approve_username']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{ApproveRequests.tableColumn3}" headerText="From" id="tableColumn3" sort="from_addr"> - <ui:hyperlink action="#{ApproveRequests.hlFrom_action}" binding="#{ApproveRequests.hlFrom}" id="hlFrom" text="#{currentRow.value['from_addr']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{ApproveRequests.tableColumn4}" headerText="Subject" id="tableColumn4" sort="subject"> - <ui:hyperlink action="#{ApproveRequests.hlSubject_action}" binding="#{ApproveRequests.hlSubject}" id="hlSubject" text="#{currentRow.value['subject']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{ApproveRequests.tableColumn5}" headerText="Content" id="tableColumn5" noWrap="true" sort="content"> - <ui:staticText binding="#{ApproveRequests.staticText3}" id="staticText3" text="#{ApproveRequests.contentType}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{ApproveRequests.tableColumn6}" embeddedActions="true" headerText="Action" id="tableColumn6"> - <ui:hyperlink action="#{ApproveRequests.hlApprove_action}" binding="#{ApproveRequests.hlApprove}" id="hlApprove" text="Approve"/> - <ui:hyperlink action="#{ApproveRequests.hlReject_action}" binding="#{ApproveRequests.hlReject}" id="hlReject" text="Reject"/> - </ui:tableColumn> - </ui:tableRowGroup> - </ui:table> - <ui:button action="goHome" binding="#{ApproveRequests.btnBack}" id="btnBack" style="left: 23px; top: 192px; position: absolute" text="Go Back"/> + <jsp:directive.include file="Header.jspf"/> + <ui:panelGroup binding="#{ApproveRequests.groupPanel1}" id="groupPanel1"> + <ui:button action="goHome" binding="#{ApproveRequests.btnBack}" id="btnBack" text="Go Back"/> + <ui:table augmentTitle="false" binding="#{ApproveRequests.table1}" id="table1" title="Table"> + <ui:tableRowGroup binding="#{ApproveRequests.tableRowGroup1}" id="tableRowGroup1" rows="10" + sourceData="#{SessionBean1.approvePendingDataProvider}" sourceVar="currentRow"> + <ui:tableColumn binding="#{ApproveRequests.tableColumn1}" headerText="Received On" id="tableColumn1" sort="time_iso"> + <ui:staticText binding="#{ApproveRequests.staticText1}" id="staticText1" text="#{currentRow.value['time_iso']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{ApproveRequests.tableColumn2}" headerText="Requestor" id="tableColumn2" noWrap="true" sort="approve_username"> + <ui:staticText binding="#{ApproveRequests.staticText2}" id="staticText2" text="#{currentRow.value['approve_username']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{ApproveRequests.tableColumn3}" headerText="From" id="tableColumn3" sort="from_addr"> + <ui:hyperlink action="#{ApproveRequests.hlFrom_action}" binding="#{ApproveRequests.hlFrom}" id="hlFrom" text="#{currentRow.value['from_addr']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{ApproveRequests.tableColumn4}" headerText="Subject" id="tableColumn4" sort="subject"> + <ui:hyperlink action="#{ApproveRequests.hlSubject_action}" binding="#{ApproveRequests.hlSubject}" id="hlSubject" text="#{currentRow.value['subject']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{ApproveRequests.tableColumn5}" headerText="Content" id="tableColumn5" noWrap="true" sort="content"> + <ui:staticText binding="#{ApproveRequests.staticText3}" id="staticText3" text="#{ApproveRequests.contentType}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{ApproveRequests.tableColumn6}" embeddedActions="true" headerText="Action" id="tableColumn6"> + <ui:hyperlink action="#{ApproveRequests.hlApprove_action}" binding="#{ApproveRequests.hlApprove}" id="hlApprove" text="Approve"/> + <ui:hyperlink action="#{ApproveRequests.hlReject_action}" binding="#{ApproveRequests.hlReject}" id="hlReject" text="Reject"/> + </ui:tableColumn> + </ui:tableRowGroup> + </ui:table> + </ui:panelGroup> + <jsp:directive.include file="Footer.jspf"/> </ui:form> </ui:body> </ui:html> Modified: amavisadmin/trunk/web/ChangePassword.jsp =================================================================== --- amavisadmin/trunk/web/ChangePassword.jsp 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/web/ChangePassword.jsp 2007-01-17 21:21:14 UTC (rev 23) @@ -8,11 +8,9 @@ <ui:link binding="#{ChangePassword.link1}" id="link1" url="/resources/stylesheet.css"/> </ui:head> <ui:body binding="#{ChangePassword.body1}" id="body1" style="-rave-layout: grid"> - <div style="left: 0px; top: 0px; position: absolute; width: 100%"> - <jsp:directive.include file="Header.jspf"/> - </div> + <jsp:directive.include file="Header.jspf"/> <ui:form binding="#{ChangePassword.form1}" id="form1"> - <h:panelGrid binding="#{ChangePassword.gridPanel1}" columns="2" id="gridPanel1" style="left: 48px; top: 168px; position: absolute"> + <h:panelGrid binding="#{ChangePassword.gridPanel1}" columns="2" id="gridPanel1" style="left: 24px; top: 168px; position: absolute"> <ui:label binding="#{ChangePassword.labOldPassword}" for="oldPassword" id="labOldPassword" text="Old Password"/> <ui:passwordField binding="#{ChangePassword.oldPassword}" id="oldPassword" required="true"/> <ui:label binding="#{ChangePassword.label2}" for="fldNewPassword" id="label2" text="New Password"/> @@ -22,8 +20,11 @@ <ui:button action="#{ChangePassword.btnSave_action}" binding="#{ChangePassword.btnSave}" id="btnSave" primary="true" text="Save"/> <ui:button action="#{ChangePassword.btnCancel_action}" binding="#{ChangePassword.btnCancel}" id="btnCancel" text="Cancel"/> </h:panelGrid> + <div style="left: 0px; top: 288px; position: absolute"> + <jsp:directive.include file="Footer.jspf"/> + </div> <ui:staticText binding="#{ChangePassword.staticText1}" escape="false" id="staticText1" - style="height: 48px; left: 48px; top: 120px; position: absolute; width: 360px" text="Please enter your new password twice to ensure that you didn't 
made a mistake."/> + style="height: 48px; left: 24px; top: 120px; position: absolute; width: 360px" text="Please enter your new password twice to ensure that you didn't 
made a mistake."/> </ui:form> </ui:body> </ui:html> Modified: amavisadmin/trunk/web/Configuration.jsp =================================================================== --- amavisadmin/trunk/web/Configuration.jsp 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/web/Configuration.jsp 2007-01-17 21:21:14 UTC (rev 23) @@ -19,7 +19,7 @@ <ui:propertySheetSection binding="#{Configuration.generalSection}" id="generalSection" label="General Settings"> <ui:property binding="#{Configuration.property16}" helpText="The application name which is displayed at the top of the window" id="property16" label="Application Title"> - <ui:textField binding="#{Configuration.fldApplicationTitle}" id="fldApplicationTitle" required="true"/> + <ui:textField binding="#{Configuration.fldApplicationTitle}" id="fldApplicationTitle" required="true" text="AmavisAdmin"/> </ui:property> <ui:property binding="#{Configuration.property12}" helpText="URL used in mails and other output where the URL is needed. This might be different from the URL used by the application." @@ -36,11 +36,6 @@ id="property19" label="Max Retention"> <ui:textField binding="#{Configuration.fldMaxRetention}" columns="5" id="fldMaxRetention" required="true" validator="#{Configuration.longRangeValidator3.validate}"/> </ui:property> - <ui:property binding="#{Configuration.property20}" - helpText="Number of days where the receipient of the email will retrieve a warning message that 
his pending SPAM/VIRUS messages will be removed automatically. To disable this feature, set the value to 0." - id="property20" label="Retention Warning Days"> - <ui:textField binding="#{Configuration.fldRetentionWarning}" columns="3" id="fldRetentionWarning" required="true" validator="#{Configuration.longRangeValidator4.validate}"/> - </ui:property> <ui:property binding="#{Configuration.property17}" helpText="Mail Address used for sending system mails a typical mail address might be <code>ama...@ex...</code>" id="property17" label="Mail Sender Address"> @@ -90,7 +85,7 @@ <ui:passwordField binding="#{Configuration.fldMailPassword}" id="fldMailPassword"/> </ui:property> <ui:property binding="#{Configuration.property3}" - helpText="If this checkbox is selected, mails are acutally not send. They are dropped instead. <em>Please not that this should be used for developement purposes only." + helpText="If this checkbox is selected, mails are acutally not send. They are dropped instead. <em>Please not that this should be used for developement purposes only.</em>" id="property3" label="Drop Mail"> <ui:checkbox binding="#{Configuration.chkDropMail}" id="chkDropMail"/> </ui:property> @@ -108,6 +103,7 @@ </ui:propertySheet> </ui:panelGroup> </ui:form> + <jsp:directive.include file="Footer.jspf"/> </ui:body> </ui:html> </ui:page> Modified: amavisadmin/trunk/web/EditJobs.jsp =================================================================== --- amavisadmin/trunk/web/EditJobs.jsp 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/web/EditJobs.jsp 2007-01-17 21:21:14 UTC (rev 23) @@ -7,38 +7,39 @@ <ui:head binding="#{EditJobs.head1}" id="head1" title="Edit jobs"> <ui:link binding="#{EditJobs.link1}" id="link1" url="/resources/stylesheet.css"/> </ui:head> - <ui:body binding="#{EditJobs.body1}" id="body1" style="-rave-layout: grid"> + <ui:body binding="#{EditJobs.body1}" id="body1"> + <jsp:directive.include file="Header.jspf"/> <ui:form binding="#{EditJobs.form1}" id="form1"> - <div style="left: 0px; top: 0px; position: absolute"> - <jsp:directive.include file="Header.jspf"/> - </div> - <ui:table augmentTitle="false" binding="#{EditJobs.table1}" id="table1" style="left: 24px; top: 168px; position: absolute; width: 480px" - title="Jobs" width="480"> - <ui:tableRowGroup binding="#{EditJobs.tableRowGroup1}" id="tableRowGroup1" rows="10" sourceData="#{SessionBean1.jobsDataProvider}" sourceVar="currentRow"> - <ui:tableColumn binding="#{EditJobs.tableColumn1}" headerText="Name" id="tableColumn1" noWrap="true" sort="job_name"> - <ui:hyperlink action="#{EditJobs.hlEditEntry_action}" binding="#{EditJobs.hlEditEntry}" id="hlEditEntry" text="#{currentRow.value['job_name']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditJobs.tableColumn2}" headerText="Description" id="tableColumn2"> - <ui:staticText binding="#{EditJobs.staticText2}" id="staticText2" text="#{currentRow.value['job_description']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditJobs.tableColumn3}" headerText="CRON Settings" id="tableColumn3" noWrap="true"> - <ui:staticText binding="#{EditJobs.staticText3}" id="staticText3" text="#{currentRow.value['job_cron_settings']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditJobs.tableColumn6}" headerText="Last Run" id="tableColumn6" noWrap="true"> - <ui:staticText binding="#{EditJobs.staticText5}" id="staticText5" text="#{currentRow.value['job_last_run_date']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditJobs.tableColumn4}" headerText="(En/Dis)abled" id="tableColumn4" noWrap="true"> - <ui:hyperlink action="#{EditJobs.hlToogle_action}" binding="#{EditJobs.hlToogle}" id="hlToogle" text="#{EditJobs.enabledDisabledText}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditJobs.tableColumn5}" id="tableColumn5"> - <ui:button binding="#{EditJobs.btnDeleteJob}" id="btnDeleteJob" text="Delete"/> - </ui:tableColumn> - </ui:tableRowGroup> - </ui:table> - <ui:button action="#{EditJobs.createDefault_action}" binding="#{EditJobs.createDefault}" id="createDefault" - style="left: 23px; top: 120px; position: absolute" text="Create Default Job-Definitions"/> - <ui:button action="#{EditJobs.btnAddNewEntry_action}" binding="#{EditJobs.btnAddNewEntry}" id="btnAddNewEntry" - style="left: 263px; top: 120px; position: absolute" text="Add New"/> + <ui:panelGroup binding="#{EditJobs.groupPanel1}" block="true" id="groupPanel1" style="margin: 5px; padding: 5px; "> + <ui:panelGroup binding="#{EditJobs.groupPanel2}" id="groupPanel2"> + <ui:button action="#{EditJobs.createDefault_action}" binding="#{EditJobs.createDefault}" id="createDefault" text="Create Default Job-Definitions"/> + <ui:button action="#{EditJobs.btnAddNewEntry_action}" binding="#{EditJobs.btnAddNewEntry}" id="btnAddNewEntry" text="Add New"/> + </ui:panelGroup> + <ui:table augmentTitle="false" binding="#{EditJobs.table1}" id="table1" title="Jobs"> + <ui:tableRowGroup binding="#{EditJobs.tableRowGroup1}" id="tableRowGroup1" rows="10" + sourceData="#{SessionBean1.jobsDataProvider}" sourceVar="currentRow"> + <ui:tableColumn binding="#{EditJobs.tableColumn1}" headerText="Name" id="tableColumn1" noWrap="true" sort="job_name"> + <ui:hyperlink action="#{EditJobs.hlEditEntry_action}" binding="#{EditJobs.hlEditEntry}" id="hlEditEntry" text="#{currentRow.value['job_name']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditJobs.tableColumn2}" headerText="Description" id="tableColumn2"> + <ui:staticText binding="#{EditJobs.staticText2}" id="staticText2" text="#{currentRow.value['job_description']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditJobs.tableColumn3}" headerText="CRON Settings" id="tableColumn3" noWrap="true"> + <ui:staticText binding="#{EditJobs.staticText3}" id="staticText3" text="#{currentRow.value['job_cron_settings']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditJobs.tableColumn6}" headerText="Last Run" id="tableColumn6" noWrap="true"> + <ui:staticText binding="#{EditJobs.staticText5}" id="staticText5" text="#{currentRow.value['job_last_run_date']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditJobs.tableColumn4}" headerText="(En/Dis)abled" id="tableColumn4" noWrap="true"> + <ui:hyperlink action="#{EditJobs.hlToogle_action}" binding="#{EditJobs.hlToogle}" id="hlToogle" text="#{EditJobs.enabledDisabledText}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditJobs.tableColumn5}" id="tableColumn5"> + <ui:button binding="#{EditJobs.btnDeleteJob}" id="btnDeleteJob" text="Delete"/> + </ui:tableColumn> + </ui:tableRowGroup> + </ui:table> + </ui:panelGroup> + <jsp:directive.include file="Footer.jspf"/> </ui:form> </ui:body> </ui:html> Modified: amavisadmin/trunk/web/EditSingleJob.jsp =================================================================== --- amavisadmin/trunk/web/EditSingleJob.jsp 2007-01-17 18:37:34 UTC (rev 22) +++ amavisadmin/trunk/web/EditSingleJob.jsp 2007-01-17 21:21:14 UTC (rev 23) @@ -7,47 +7,46 @@ <ui:head binding="#{EditSingleJob.head1}" id="head1" title="Edit Job"> <ui:link binding="#{EditSingleJob.link1}" id="link1" url="/resources/stylesheet.css"/> </ui:head> - <ui:body binding="#{EditSingleJob.body1}" focus="form1:fldJobName" id="body1" style="-rave-layout: grid"> - <div style="left: 0px; top: 0px; position: absolute"> - <jsp:directive.include file="Header.jspf"/> - </div> + <ui:body binding="#{EditSingleJob.body1}" focus="form1:fldJobName" id="body1"> + <jsp:directive.include file="Header.jspf"/> <ui:form binding="#{EditSingleJob.form1}" id="form1"> - <ui:button action="#{EditSingleJob.btnSave_action}" binding="#{EditSingleJob.btnSave}" id="btnSave" - style="left: 23px; top: 144px; position: absolute" text="Save"/> - <ui:button action="#{EditSingleJob.btnCancel_action}" binding="#{EditSingleJob.btnCancel}" id="btnCancel" - style="position: absolute; left: 120px; top: 144px" text="Cancel"/> - <h:panelGrid binding="#{EditSingleJob.gridPanel1}" cellpadding="5" columns="2" id="gridPanel1" - style="height: 96px; left: 24px; top: 192px; position: absolute" width="648"> - <ui:label binding="#{EditSingleJob.label1}" for="fldJobName" id="label1" text="Job-Name"/> - <ui:textField binding="#{EditSingleJob.fldJobName}" id="fldJobName" required="true"/> - <ui:label binding="#{EditSingleJob.label3}" for="fldDescription" id="label3" text="Description"/> - <ui:textArea binding="#{EditSingleJob.fldDescription}" columns="40" id="fldDescription" required="true" rows="4"/> - <ui:label binding="#{EditSingleJob.labCRON}" for="fldCRONSchedule" id="labCRON" text="Scheduling"/> - <ui:textField binding="#{EditSingleJob.fldCRONSchedule}" id="fldCRONSchedule" required="true" validator="#{EditSingleJob.fldCRONSchedule_validate}"/> - <ui:label binding="#{EditSingleJob.label2}" for="dropDown1" id="label2" text="Job Class"/> - <ui:dropDown binding="#{EditSingleJob.dropDown1}" id="dropDown1" items="#{EditSingleJob.dropDown1DefaultOptions.options}" - onChange="common_timeoutSubmitForm(this.form, 'gridPanel1:dropDown1');" required="true" valueChangeListener="#{EditSingleJob.dropDown1_processValueChange}"/> - <ui:hiddenField binding="#{EditSingleJob.hiddenField1}" id="hiddenField1"/> - <ui:checkbox binding="#{EditSingleJob.chkEnabled}" id="chkEnabled" label="Enabled" labelLevel="2"/> - </h:panelGrid> - <ui:table augmentTitle="false" binding="#{EditSingleJob.table1}" id="table1" - style="left: 24px; top: 432px; position: absolute; width: 440px" title="Configuration Settings"> - <ui:tableRowGroup binding="#{EditSingleJob.tableRowGroup1}" emptyDataMsg="No configuration entries defined for this job" - id="tableRowGroup1" rows="10" sourceData="#{EditSingleJob.configurationTableEntries}" sourceVar="currentRow"> - <ui:tableColumn binding="#{EditSingleJob.tableColumn1}" headerText="Field" id="tableColumn1" sort="name"> - <ui:staticText binding="#{EditSingleJob.staticText1}" id="staticText1" text="#{currentRow.value['name']}"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditSingleJob.tableColumn2}" headerText="Value" id="tableColumn2" sort="value"> - <ui:textField binding="#{EditSingleJob.textField1}" id="textField1" required="#{EditSingleJob.inputRequired}" text="#{currentRow.value['value']}"/> - <ui:message binding="#{EditSingleJob.message1}" for="textField1" id="message1" showDetail="false" showSummary="true"/> - </ui:tableColumn> - <ui:tableColumn binding="#{EditSingleJob.tableColumn3}" id="tableColumn3" width="200"> - <ui:button action="#{EditSingleJob.btnReset_action}" binding="#{EditSingleJob.btnReset}" - disabled="#{EditSingleJob.resetPossible}" id="btnReset" text="Reset"/> - </ui:tableColumn> - </ui:tableRowGroup> - </ui:table> + <ui:panelGroup binding="#{EditSingleJob.groupPanel1}" block="true" id="groupPanel1" style="margin: 5px; padding: 5px; "> + <ui:panelGroup binding="#{EditSingleJob.groupPanel2}" id="groupPanel2"> + <ui:button action="#{EditSingleJob.btnSave_action}" binding="#{EditSingleJob.btnSave}" id="btnSave" text="Save"/> + <ui:button action="#{EditSingleJob.btnCancel_action}" binding="#{EditSingleJob.btnCancel}" id="btnCancel" text="Cancel"/> + </ui:panelGroup> + <h:panelGrid binding="#{EditSingleJob.gridPanel1}" cellpadding="5" columns="2" id="gridPanel1" style="height: 96px" width="648"> + <ui:label binding="#{EditSingleJob.label1}" for="fldJobName" id="label1" text="Job-Name"/> + <ui:textField binding="#{EditSingleJob.fldJobName}" id="fldJobName" required="true"/> + <ui:label binding="#{EditSingleJob.label3}" for="fldDescription" id="label3" text="Description"/> + <ui:textArea binding="#{EditSingleJob.fldDescription}" columns="40" id="fldDescription" required="true" rows="4"/> + <ui:label binding="#{EditSingleJob.labCRON}" for="fldCRONSchedule" id="labCRON" text="Scheduling"/> + <ui:textField binding="#{EditSingleJob.fldCRONSchedule}" id="fldCRONSchedule" required="true" validator="#{EditSingleJob.fldCRONSchedule_validate}"/> + <ui:label binding="#{EditSingleJob.label2}" for="dropDown1" id="label2" text="Job Class"/> + <ui:dropDown binding="#{EditSingleJob.dropDown1}" id="dropDown1" items="#{EditSingleJob.dropDown1DefaultOptions.options}" + onChange="common_timeoutSubmitForm(this.form, 'gridPanel1:dropDown1');" required="true" valueChangeListener="#{EditSingleJob.dropDown1_processValueChange}"/> + <ui:hiddenField binding="#{EditSingleJob.hiddenField1}" id="hiddenField1"/> + <ui:checkbox binding="#{EditSingleJob.chkEnabled}" id="chkEnabled" label="Enabled" labelLevel="2"/> + </h:panelGrid> + <ui:table augmentTitle="false" binding="#{EditSingleJob.table1}" id="table1" style="width: 440px" title="Configuration Settings"> + <ui:tableRowGroup binding="#{EditSingleJob.tableRowGroup1}" emptyDataMsg="No configuration entries defined for this job" + id="tableRowGroup1" rows="10" sourceData="#{EditSingleJob.configurationTableEntries}" sourceVar="currentRow"> + <ui:tableColumn binding="#{EditSingleJob.tableColumn1}" headerText="Field" id="tableColumn1" sort="name"> + <ui:staticText binding="#{EditSingleJob.staticText1}" id="staticText1" text="#{currentRow.value['name']}"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditSingleJob.tableColumn2}" headerText="Value" id="tableColumn2" sort="value"> + <ui:textField binding="#{EditSingleJob.textField1}" id="textField1" required="#{EditSingleJob.inputRequired}" text="#{currentRow.value['value']}"/> + <ui:message binding="#{EditSingleJob.message1}" for="textField1" id="message1" showDetail="false" showSummary="true"/> + </ui:tableColumn> + <ui:tableColumn binding="#{EditSingleJob.tableColumn3}" id="tableColumn3" ... [truncated message content] |
From: <str...@us...> - 2007-01-18 21:50:33
|
Revision: 31 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=31&view=rev Author: streindl Date: 2007-01-18 13:50:33 -0800 (Thu, 18 Jan 2007) Log Message: ----------- Partial fix for #1638972 Modified Paths: -------------- amavisadmin/trunk/db/postgres/update_v0_v1.sql amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationDAO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java Modified: amavisadmin/trunk/db/postgres/update_v0_v1.sql =================================================================== --- amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-18 21:48:44 UTC (rev 30) +++ amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-18 21:50:33 UTC (rev 31) @@ -8,7 +8,7 @@ key varchar(64) not null, version int4 default 0 not null, value varchar(255) not null, - job_ref varchar(64), + job_ref varchar(64) not null, primary key (key)); create table jobs ( @@ -133,6 +133,12 @@ job_class, job_enabled, job_special) values ('$$Migrate V0 to V1', 'Migration', 'dummy', 'de.sreindl.amavisadmin.migration.MigrateV0toV1', true, true); + +-- 4.2 Dummy job for global variable reference +insert into jobs (job_name, job_description, job_cron_settings, + job_class, job_enabled, job_special) + values ('$$Global', 'Global Variables', 'dummy', + 'de.sreindl.amavisadmin.jobs.BaseJob', false, true); -- 4. Configuration version update Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-18 21:48:44 UTC (rev 30) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-18 21:50:33 UTC (rev 31) @@ -15,15 +15,18 @@ */ package de.sreindl.amavisadmin.bo; +import de.sreindl.amavisadmin.db.ConfigurationDAO; import de.sreindl.amavisadmin.db.ConfigurationSetting; +import de.sreindl.amavisadmin.db.Job; +import de.sreindl.amavisadmin.db.JobDAO; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; @@ -94,11 +97,15 @@ if (log.isDebugEnabled()) { log.debug("setValue (" + key + ", " + value + ")"); } + JobDAO dao = new JobDAO(); + Job globalJob = dao.findById(GLOBAL_JOB); if (confMap != null) { ConfigurationSetting c = (ConfigurationSetting)confMap.get(key); if (c == null) { c = new ConfigurationSetting(); + // 1638972 c.setKey(key); + c.setJob(globalJob); } c.setValue(value); confMap.put(key, c); @@ -178,8 +185,13 @@ Session sess = null; try { sess = HibernateSessionFactory.getSession(); - Query qry = sess.createQuery("from ConfigurationSetting where job is null"); - Iterator i = qry.iterate(); + // 1638972+ + ConfigurationDAO dao = new ConfigurationDAO(); + JobDAO jobDAO = new JobDAO(); + Job globalJob = jobDAO.findById(GLOBAL_JOB); + List confList = dao.findJob(globalJob); + Iterator i = confList.iterator(); + // -1638972 while (i.hasNext()) { ConfigurationSetting c = (ConfigurationSetting)i.next(); confMap.put(c.getKey(), c); @@ -204,4 +216,6 @@ public final static String DOM_REL_HOST = "amavisadmin.domain.release_host"; public final static String DOM_REL_PORT = "amavisadmin.domain.release_port"; public final static String MAIL_SENDER = "amavisadmin.mail.sender"; + + public final static String GLOBAL_JOB = "$$Global"; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationDAO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationDAO.java 2007-01-18 21:48:44 UTC (rev 30) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationDAO.java 2007-01-18 21:50:33 UTC (rev 31) @@ -34,6 +34,7 @@ //property constants public static final String VALUE = "value"; + public static final String JOB = "job"; public void save(ConfigurationSetting transientInstance) { @@ -105,6 +106,15 @@ return findByProperty(VALUE, email); } + /** + * Find configuration entries for a particular job + * + * #1638972 + */ + public List findJob(Object job) { + return findByProperty(JOB, job); + } + public ConfigurationSetting merge(ConfigurationSetting detachedInstance) { log.debug("merging ConfigurationSetting instance"); try { @@ -139,4 +149,5 @@ throw re; } } + } \ No newline at end of file Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml 2007-01-18 21:48:44 UTC (rev 30) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml 2007-01-18 21:50:33 UTC (rev 31) @@ -28,6 +28,7 @@ <property name="value" type="java.lang.String"> <column name="value" not-null="true" /> </property> - <many-to-one name="job" column="job_ref" /> + <!-- #1638972 --> + <many-to-one name="job" column="job_ref" not-null="true" /> </class> </hibernate-mapping> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java 2007-01-18 21:48:44 UTC (rev 30) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java 2007-01-18 21:50:33 UTC (rev 31) @@ -39,6 +39,9 @@ * <p>This job is responsible for delivering mails stored in table * <code>MAIL_QUEUE</code> to their receipients. * </p> + * + * #1638972 Rename config keys to make them unique. + * * @author sreindl */ public class MailSendJob extends BaseJob { @@ -90,18 +93,18 @@ */ public ArrayList<ConfigurationDataEntry> getConfigurationDataTable() { ArrayList<ConfigurationDataEntry> entries = new ArrayList<ConfigurationDataEntry>(); - entries.add(new ConfigurationDataEntry("amavisadmin.mail.server", "Mail Server", "The mail server to be used", true, DEFAULT_MAIL_SERVER)); - entries.add(new ConfigurationDataEntry("amavisadmin.mail.port", "Mail port", "The port to be used", true, DEFAULT_MAIL_PORT)); - entries.add(new ConfigurationDataEntry("amavisadmin.mail.user", "User Name", "The user to login to the mail server")); - entries.add(new ConfigurationDataEntry("amavisadmin.mail.password", "Password", "The password for authentification")); + entries.add(new ConfigurationDataEntry("amavisadmin.mailJob.server", "Mail Server", "The mail server to be used", true, DEFAULT_MAIL_SERVER)); + entries.add(new ConfigurationDataEntry("amavisadmin.mailJob.port", "Mail port", "The port to be used", true, DEFAULT_MAIL_PORT)); + entries.add(new ConfigurationDataEntry("amavisadmin.mailJob.user", "User Name", "The user to login to the mail server")); + entries.add(new ConfigurationDataEntry("amavisadmin.mailJob.password", "Password", "The password for authentification")); //TODO: DEVELOPMENT entry - ConfigurationDataEntry entry = new ConfigurationDataEntry(MailHandler.KEY_DROP_MAIL, "Drop Mail", "To not actually send the mails! For development purposes!"); + ConfigurationDataEntry entry = new ConfigurationDataEntry("amavisadmin.mailJob.debug", "Drop Mail", "To not actually send the mails! For development purposes!"); entry.setType(ConfigurationDataEntry.TYPE_CHECKBOX); entry.setDefaultValue("false"); entry.setRequired(true); entries.add(entry); // - entry = new ConfigurationDataEntry("amavisadmin.mail.debug", "Debug SMTP", "Print Debug statements for mail delivery. This is mainly used for debugging purposes"); + entry = new ConfigurationDataEntry("amavisadmin.mailJob.debug", "Debug SMTP", "Print Debug statements for mail delivery. This is mainly used for debugging purposes"); entry.setType(ConfigurationDataEntry.TYPE_CHECKBOX); entry.setDefaultValue("false"); entry.setRequired(true); @@ -121,26 +124,26 @@ return false; } mailProperties.setProperty("mail.transport.protocol", "smtp"); - ConfigurationSetting conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mail.server"); + ConfigurationSetting conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.server"); if (conf == null) { mailProperties.setProperty("mail.host", DEFAULT_MAIL_SERVER); } else { mailProperties.setProperty("mail.host", conf.getValue()); } - conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mail.port"); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.port"); if (conf == null) { mailProperties.setProperty("mail.port", DEFAULT_MAIL_PORT); } else { mailProperties.setProperty("mail.port", conf.getValue()); } - conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mail.user"); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.user"); if (conf == null) { return true; // no user or password given } String user = conf.getValue(); if (user != null && user.length() > 0) { mailProperties.setProperty("mail.user", user); - conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mail.password"); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.password"); if (conf != null) { // optional String password = conf.getValue(); @@ -148,11 +151,11 @@ mailProperties.setProperty("mail.password", password); } } - conf = (ConfigurationSetting)getConfItems().get(MailHandler.KEY_DROP_MAIL); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.debug"); if (conf != null && Boolean.getBoolean(conf.getValue())) { - mailProperties.setProperty(MailHandler.KEY_DROP_MAIL, "true"); + mailProperties.setProperty("amavisadmin.mailJob.debug", "true"); } - conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mail.debug"); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.debug"); if (conf != null && Boolean.getBoolean(conf.getValue())) { mailProperties.setProperty("mail.smtp.debug", "true"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-20 15:47:40
|
Revision: 33 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=33&view=rev Author: streindl Date: 2007-01-20 07:47:38 -0800 (Sat, 20 Jan 2007) Log Message: ----------- Fixes for: * 1640285 Dp not use plural terms for table names * 1639757 Admin reminder contains wrong HQL * 1639749 Regression: No mails are send via batch * 1639740 Bugs in deletion reminder mail * 1638972 Not possible to create parameters for jobs Modified Paths: -------------- amavisadmin/trunk/db/postgres/update_v0_v1.sql amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSetting.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailQueueReceipient.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Request.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReminderJob.java amavisadmin/trunk/web/EditSingleJob.jsp Added Paths: ----------- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSettingId.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSettingId.java Modified: amavisadmin/trunk/db/postgres/update_v0_v1.sql =================================================================== --- amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/db/postgres/update_v0_v1.sql 2007-01-20 15:47:38 UTC (rev 33) @@ -4,14 +4,17 @@ -- new tables +-- #1638972 create table configuration ( - key varchar(64) not null, + "key" varchar(64) not null, + job_ref varchar(64) not null, version int4 default 0 not null, - value varchar(255) not null, - job_ref varchar(64) not null, - primary key (key)); + "value" varchar(255) not null, + primary key ("key", job_ref) +); -create table jobs ( +-- #1640285 +create table job ( job_name varchar(64) not null, version int4 default 0 not null, job_description varchar(255) not null, @@ -20,8 +23,22 @@ job_special bool not null default false, job_enabled bool not null default false, job_last_run_date timestamp, - primary key (job_name)); + primary key (job_name) +); +-- postponed to 0.2 +--create table job_status ( +-- job_name varchar(64) not null, +-- job_run_date timestamp with time zone +-- not null, +-- version int4 default 0 not null, +-- job_status character(1) default ' ' +-- not null +-- check (job_status in (' ', 'S', 'E')), +-- job_status_message text not null, +-- primary key (job_name, job_run_date) +--); + create table mail_queue ( id int4 not null, version int4 default 0 not null, @@ -33,30 +50,34 @@ encoding varchar(128) not null, mail_text text not null, error varchar(255), - primary key (id)); + primary key (id) +); create sequence mail_queue_id_seq; -create table mail_queue_rcpts ( +create table mail_queue_rcpt ( id int4 not null, version int4 default 0 not null, rcpt_type char(1) check (rcpt_type IN ('T', 'C', 'B')), receipient varchar(255) not null, mail_queue_id int4 not null, - primary key (id)); + primary key (id) +); -create sequence mail_queue_rcpts_id_seq; +create sequence mail_queue_rcpt_id_seq; -create table requests ( - key varchar(255) not null, +-- #1640285 +create table request ( + "key" varchar(255) not null, version int4 default 0 not null, handler_Type varchar(255) not null, status char(1) not null, expiration_date timestamp not null, param1 varchar(255), param2 varchar(255), - primary key (key)); + primary key ("key") +); -- 2. changes to existing tables @@ -108,10 +129,11 @@ -- constraints with internal names ($1...). alter table maddr add constraint maddr_fk_1 foreign key (user_id) references users; + alter table configuration add constraint constraint_fk_1 - foreign key (job_ref) references jobs; + foreign key (job_ref) references job; -alter table mail_queue_rcpts add constraint mail_queue_recpts_fk_1 +alter table mail_queue_rcpt add constraint mail_queue_rcpt_fk_1 foreign key (mail_queue_id) references mail_queue; alter table msgrcpt drop constraint "$1"; @@ -129,13 +151,13 @@ -- 4. Load data -- 4.1 Migration Job -insert into jobs (job_name, job_description, job_cron_settings, +insert into job (job_name, job_description, job_cron_settings, job_class, job_enabled, job_special) values ('$$Migrate V0 to V1', 'Migration', 'dummy', 'de.sreindl.amavisadmin.migration.MigrateV0toV1', true, true); --- 4.2 Dummy job for global variable reference -insert into jobs (job_name, job_description, job_cron_settings, +-- 4.2 Dummy job for global variable references +insert into job (job_name, job_description, job_cron_settings, job_class, job_enabled, job_special) values ('$$Global', 'Global Variables', 'dummy', 'de.sreindl.amavisadmin.jobs.BaseJob', false, true); Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-20 15:47:38 UTC (rev 33) @@ -38,12 +38,10 @@ import com.sun.rave.web.ui.component.TextField; import com.sun.rave.web.ui.model.Option; import com.sun.rave.web.ui.model.SingleSelectOptionsList; -import de.sreindl.amavisadmin.ApplicationBean1; -import de.sreindl.amavisadmin.RequestBean1; -import de.sreindl.amavisadmin.SessionBean1; import de.sreindl.amavisadmin.bo.configuration.ConfigurationDataEntry; import de.sreindl.amavisadmin.bo.configuration.ConfigurationDataTable; import de.sreindl.amavisadmin.db.ConfigurationSetting; +import de.sreindl.amavisadmin.db.ConfigurationSettingId; import de.sreindl.amavisadmin.db.Job; import de.sreindl.amavisadmin.db.JobDAO; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; @@ -55,6 +53,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.Iterator; import javax.faces.FacesException; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; @@ -377,23 +376,23 @@ public void setMessage1(Message m) { this.message1 = m; } - + private PanelGroup groupPanel1 = new PanelGroup(); - + public PanelGroup getGroupPanel1() { return groupPanel1; } - + public void setGroupPanel1(PanelGroup pg) { this.groupPanel1 = pg; } - + private PanelGroup groupPanel2 = new PanelGroup(); - + public PanelGroup getGroupPanel2() { return groupPanel2; } - + public void setGroupPanel2(PanelGroup pg) { this.groupPanel2 = pg; } @@ -485,33 +484,41 @@ * this page.</p> */ public void prerender() { - if (!FacesContext.getCurrentInstance().getMessages().hasNext()) { - // regular startup - String jobName = (String)getSessionBean1().getParameter("JOB_NAME"); - this.erase(); - if (jobName != null) { - JobDAO dao = new JobDAO(); - Job currentJob = dao.findById(jobName); - fldJobName.setText(currentJob.getJobName()); - fldDescription.setText(currentJob.getDescription()); - fldCRONSchedule.setText(currentJob.getCronSettings()); - dropDown1.setValue(currentJob.getJobClass().getName()); - chkEnabled.setSelected(currentJob.getEnabled()); - try { - BaseJob job = (BaseJob)currentJob.getJobClass().newInstance(); - ArrayList<ConfigurationDataEntry> entries = - job.getConfigurationDataTable(); - ConfigurationDataEntry[] deArray = - entries.toArray(new ConfigurationDataEntry[entries.size()]); - getSessionBean1().getConfigurationTableEntries().setArray(deArray); - } catch (InstantiationException ie) { - log("Error ", ie); - } catch (IllegalAccessException iae) { - log("Error ", iae); + // regular startup + String jobName = (String)getSessionBean1().getParameter("JOB_NAME"); + this.erase(); + if (jobName != null) { + JobDAO dao = new JobDAO(); + Job currentJob = dao.findById(jobName); + fldJobName.setText(currentJob.getJobName()); + fldDescription.setText(currentJob.getDescription()); + fldCRONSchedule.setText(currentJob.getCronSettings()); + dropDown1.setValue(currentJob.getJobClass().getName()); + chkEnabled.setSelected(currentJob.getEnabled()); + try { + BaseJob job = (BaseJob)currentJob.getJobClass().newInstance(); + ArrayList<ConfigurationDataEntry> entries = + job.getConfigurationDataTable(); + // add job's configuration entries to array + Iterator<ConfigurationDataEntry> iKeys = entries.iterator(); + while (iKeys.hasNext()) { + ConfigurationDataEntry entry = iKeys.next(); + if (currentJob.getConfItems().containsKey(entry.getKey())) { + ConfigurationSetting confEntry = + (ConfigurationSetting)currentJob.getConfItems().get(entry.getKey()); + entry.setValue(confEntry.getValue()); + } } - } else { - getSessionBean1().getConfigurationTableEntries().setArray(null); + ConfigurationDataEntry[] deArray = + entries.toArray(new ConfigurationDataEntry[entries.size()]); + configurationTableEntries.setArray(deArray); + } catch (InstantiationException ie) { + log("Error ", ie); + } catch (IllegalAccessException iae) { + log("Error ", iae); } + } else { + configurationTableEntries.setArray(null); } } @@ -679,7 +686,7 @@ } currentJob.setConfItems(new HashMap()); saveConfEntries(currentJob, - (ConfigurationDataEntry[])getSessionBean1().getConfigurationTableEntries().getArray()); + (ConfigurationDataEntry[])configurationTableEntries.getArray()); trx.commit(); // refresh data set getSessionBean1().getJobsDataProvider().refresh(); @@ -759,14 +766,19 @@ private void saveConfEntries(Job currentJob, ConfigurationDataEntry[] confEntries) { Session session = HibernateSessionFactory.getSession(); for (int i = 0; i < confEntries.length; i++) { + // #1638972 ConfigurationDataEntry ent = confEntries[i]; - if (ent.getValue() != null) { - if (!ent.getValue().equals(ent.getDefaultValue())) { - ConfigurationSetting conf = new ConfigurationSetting(ent.getKey(), ent.getValue(), currentJob); - session.save(conf); - currentJob.getConfItems().put(ent.getKey(), conf); - } + ConfigurationSettingId key = + new ConfigurationSettingId(ent.getKey(), currentJob); + ConfigurationSetting conf = + (ConfigurationSetting)session.get(ConfigurationSetting.class, + key); + if (conf == null) { + conf = new ConfigurationSetting(key, ent.getValue()); } + conf.setValue(ent.getValue()); + session.save(conf); + currentJob.getConfItems().put(ent.getKey(), conf); } } @@ -779,8 +791,7 @@ job.getConfigurationDataTable(); ConfigurationDataEntry[] deArray = entries.toArray(new ConfigurationDataEntry[entries.size()]); - getSessionBean1(). - getConfigurationTableEntries().setArray(deArray); + configurationTableEntries.setArray(deArray); } catch (ClassNotFoundException cnfe) { log("Error ", cnfe); } catch (InstantiationException ie) { Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-20 15:47:38 UTC (rev 33) @@ -17,6 +17,7 @@ import de.sreindl.amavisadmin.db.ConfigurationDAO; import de.sreindl.amavisadmin.db.ConfigurationSetting; +import de.sreindl.amavisadmin.db.ConfigurationSettingId; import de.sreindl.amavisadmin.db.Job; import de.sreindl.amavisadmin.db.JobDAO; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; @@ -102,10 +103,8 @@ if (confMap != null) { ConfigurationSetting c = (ConfigurationSetting)confMap.get(key); if (c == null) { - c = new ConfigurationSetting(); - // 1638972 - c.setKey(key); - c.setJob(globalJob); + //# 1638972 + c = new ConfigurationSetting(new ConfigurationSettingId(key, globalJob)); } c.setValue(value); confMap.put(key, c); @@ -127,23 +126,21 @@ try { sess = HibernateSessionFactory.getSession(); trx = sess.beginTransaction(); + JobDAO jobDAO = new JobDAO(); + Job globalJob = jobDAO.findById(GLOBAL_JOB); Iterator i = confMap.keySet().iterator(); while (i.hasNext()) { String key = (String)i.next(); - ConfigurationSetting c = (ConfigurationSetting)confMap.get(key); - log.debug("Saving key " + c.getKey()); - if (c.getValue() == null) { - if (c.getVersion() != null && c.getVersion().intValue() >= 0) { - // value has been stored already --> delete - sess.delete(c); - } - } else if (c.getVersion() == null || c.getVersion().intValue() == 0) { - // new value - sess.saveOrUpdate(c); - } else { - // update - sess.update(c); + //#1638972 + log.debug("Saving key " + key); + ConfigurationSetting c = (ConfigurationSetting)sess.get( + ConfigurationSetting.class, + new ConfigurationSettingId(key, globalJob)); + if (c == null) { + c = new ConfigurationSetting(new ConfigurationSettingId(key, globalJob)); } + c.setValue(((ConfigurationSetting)confMap.get(key)).getValue()); + sess.saveOrUpdate(c); } trx.commit(); HibernateSessionFactory.closeSession(); @@ -194,7 +191,7 @@ // -1638972 while (i.hasNext()) { ConfigurationSetting c = (ConfigurationSetting)i.next(); - confMap.put(c.getKey(), c); + confMap.put(c.getId().getKey(), c); } if (sess.isDirty()) { log.fatal("Session is dirty???"); Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSetting.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSetting.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSetting.java 2007-01-20 15:47:38 UTC (rev 33) @@ -24,8 +24,8 @@ */ public abstract class AbstractConfigurationSetting implements Serializable { - - private String key; + // #1638972 + private AbstractConfigurationSettingId id; private Integer version; private String value; @@ -33,25 +33,15 @@ public AbstractConfigurationSetting() { } - public AbstractConfigurationSetting(String key, String value) { - this.key = key; - this.value = value; + public AbstractConfigurationSetting(AbstractConfigurationSettingId id) { + this.id = id; } - public AbstractConfigurationSetting(String key, String value, Job job) { - this.key = key; + public AbstractConfigurationSetting(AbstractConfigurationSettingId id, String value) { + this.id = id; this.value = value; - this.job = job; } - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - public Integer getVersion() { return version; } @@ -88,5 +78,13 @@ public void setJob(Job job) { this.job = job; } + + public AbstractConfigurationSettingId getId() { + return id; + } + + public void setId(AbstractConfigurationSettingId id) { + this.id = id; + } } \ No newline at end of file Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSettingId.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSettingId.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/AbstractConfigurationSettingId.java 2007-01-20 15:47:38 UTC (rev 33) @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2007 Stephen Reindl + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* + * AbstractConfigurationSettingId.java + * + * Created on 20. Januar 2007, 12:12 + * + */ + +package de.sreindl.amavisadmin.db; + +import java.io.Serializable; + +/** + * + * @author sreindl + */ +public class AbstractConfigurationSettingId implements Serializable { + private String key; + private Job job; + + + /** Creates a new instance of AbstractConfigurationSettingId */ + public AbstractConfigurationSettingId() { + } + + + + /** full constructor */ + public AbstractConfigurationSettingId(String key, Job job){ + setKey(key); + setJob(job); + } + + public boolean equals(Object other) { + if ( (this == other ) ) return true; + if ( (other == null ) ) return false; + if ( !(other instanceof AbstractConfigurationSettingId) ) return false; + AbstractConfigurationSettingId castOther = (AbstractConfigurationSettingId) other; + + return ( (this.getKey()==castOther.getKey()) || ( this.getKey()!=null && castOther.getKey()!=null && this.getKey().equals(castOther.getKey()) ) ) + && ( (this.getJob()==castOther.getJob()) || ( this.getJob()!=null && castOther.getJob()!=null && this.getJob().equals(castOther.getKey()) ) ); + } + + public int hashCode() { + int result = 17; + + result = 37 * result + ( getKey() == null ? 0 : this.getKey().hashCode() ); + result = 37 * result + ( getJob() == null ? 0 : this.getJob().hashCode() ); + return result; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Job getJob() { + return job; + } + + public void setJob(Job job) { + this.job = job; + } + + + + +} Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.hbm.xml 2007-01-20 15:47:38 UTC (rev 33) @@ -17,18 +17,22 @@ * limitations under the License. --> <hibernate-mapping> + <!-- #1638972 --> <class name="de.sreindl.amavisadmin.db.ConfigurationSetting" lazy="false" table="configuration" schema="public"> - <id name="key" > - <column name="key" length="64" /> - <generator class="assigned" /> - </id> + <composite-id name="id" class="de.sreindl.amavisadmin.db.ConfigurationSettingId" > + <key-property name="key" type="java.lang.String"> + <column name="key" length="64" not-null="true" /> + </key-property> + <key-many-to-one name="job" class="de.sreindl.amavisadmin.db.Job" foreign-key="configuration_fk1"> + <column name="job_ref" not-null="true" /> + </key-many-to-one> + </composite-id> <version name="version" type="java.lang.Integer" insert="false" > <column name="version" default="0" /> </version> <property name="value" type="java.lang.String"> <column name="value" not-null="true" /> </property> - <!-- #1638972 --> - <many-to-one name="job" column="job_ref" not-null="true" /> + <many-to-one name="job" column="job_ref" not-null="true" update="false" insert="false"/> </class> </hibernate-mapping> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSetting.java 2007-01-20 15:47:38 UTC (rev 33) @@ -20,6 +20,8 @@ /** * Configuration Setting + * + * @bug 1638972 */ public class ConfigurationSetting extends AbstractConfigurationSetting implements Serializable { @@ -29,11 +31,11 @@ public ConfigurationSetting() { } - public ConfigurationSetting(String key, String value) { - super (key, value); + public ConfigurationSetting(ConfigurationSettingId id) { + super (id); } - - public ConfigurationSetting(String key, String value, Job job) { - super(key, value, job); + + public ConfigurationSetting(ConfigurationSettingId id, String value) { + super (id, value); } } Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSettingId.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSettingId.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/ConfigurationSettingId.java 2007-01-20 15:47:38 UTC (rev 33) @@ -0,0 +1,47 @@ +/* + * Copyright (C) {YEAR!!} Stephen Reindl + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* + * ConfigurationSettingId.java + * + * Created on 20. Januar 2007, 12:20 + * + */ + +package de.sreindl.amavisadmin.db; + +import java.io.Serializable; + +/** + * Class representing the primary key for table configuration + * + * @author sreindl + * + * @bug 1638972 + */ +public class ConfigurationSettingId extends AbstractConfigurationSettingId implements Serializable { + + /** Creates a new instance of ConfigurationSettingId */ + public ConfigurationSettingId() { + } + + /** Creates a new instance of ConfigurationSettingId */ + public ConfigurationSettingId(String key, Job job) { + super (key, job); + } + +} Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-20 15:47:38 UTC (rev 33) @@ -17,7 +17,8 @@ * limitations under the License. --> <hibernate-mapping> - <class name="de.sreindl.amavisadmin.db.Job" table="jobs" schema="public"> + <!-- #1640285 --> + <class name="de.sreindl.amavisadmin.db.Job" table="job" schema="public"> <id name="jobName"> <column name="job_name" length="64" /> <generator class="assigned" /> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailQueueReceipient.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailQueueReceipient.hbm.xml 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MailQueueReceipient.hbm.xml 2007-01-20 15:47:38 UTC (rev 33) @@ -17,11 +17,11 @@ * limitations under the License. --> <hibernate-mapping> - <class name="de.sreindl.amavisadmin.db.MailQueueReceipient" table="mail_queue_rcpts" schema="public"> + <class name="de.sreindl.amavisadmin.db.MailQueueReceipient" table="mail_queue_rcpt" schema="public"> <id name="id" type="java.lang.Integer" > <column name="id" /> <generator class="sequence"> - <param name="sequence">mail_queue_rcpts_id_seq</param> + <param name="sequence">mail_queue_rcpt_id_seq</param> </generator> </id> <version name="version" type="java.lang.Integer" unsaved-value="null" insert="false" > @@ -31,7 +31,7 @@ <column name="rcpt_type" check="rcpt_type IN ('T', 'C', 'B')" /> </property> <property name="receipient" type="java.lang.String" length="255" not-null="true" /> - <many-to-one name="mailQueueEntry" class="de.sreindl.amavisadmin.db.MailQueueEntry" > + <many-to-one name="mailQueueEntry" class="de.sreindl.amavisadmin.db.MailQueueEntry" foreign-key="mail_queue_rcpt_fk_1"> <column name="mail_queue_id" not-null="true" /> </many-to-one> </class> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Request.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Request.hbm.xml 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Request.hbm.xml 2007-01-20 15:47:38 UTC (rev 33) @@ -17,10 +17,11 @@ * limitations under the License. --> <hibernate-mapping> - <class name="de.sreindl.amavisadmin.db.Request" table="requests" schema="public"> + <!-- #1640285 --> + <class name="de.sreindl.amavisadmin.db.Request" table="request" schema="public"> <id name="key" type="java.lang.String" unsaved-value="null"> <column name="key" /> - <generator class="assigned"></generator> + <generator class="assigned" /> </id> <version name="version" type="java.lang.Integer" insert="false" > <column name="version" default="0" /> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java 2007-01-20 15:47:38 UTC (rev 33) @@ -61,7 +61,8 @@ log.info("Starting new admin notifier job"); Session session = HibernateSessionFactory.getSession(); User user; - Query qry = session.createQuery("select count(*) from MsgRecipient where rs = :wait_ind"); + // #1639757 + Query qry = session.createQuery("select count(*) from MsgReceipient where rs = :wait_ind"); qry.setCharacter("wait_ind", MsgReceipientDAO.RS_REL_PENDING); BigInteger count = (BigInteger)qry.uniqueResult(); Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/MailSendJob.java 2007-01-20 15:47:38 UTC (rev 33) @@ -74,6 +74,8 @@ Iterator i = entries.iterator(); while (i.hasNext()) { MailQueueEntry entry = (MailQueueEntry)i.next(); + // #1639749 + MailHandler.sendSingleMail(entry, mailProperties); session.update(entry); } trx.commit(); @@ -104,7 +106,7 @@ entry.setRequired(true); entries.add(entry); // - entry = new ConfigurationDataEntry("amavisadmin.mailJob.debug", "Debug SMTP", "Print Debug statements for mail delivery. This is mainly used for debugging purposes"); + entry = new ConfigurationDataEntry("amavisadmin.mailJob.debugSMTP", "Debug SMTP", "Print Debug statements for mail delivery. This is mainly used for debugging purposes"); entry.setType(ConfigurationDataEntry.TYPE_CHECKBOX); entry.setDefaultValue("false"); entry.setRequired(true); @@ -155,7 +157,7 @@ if (conf != null && Boolean.getBoolean(conf.getValue())) { mailProperties.setProperty("amavisadmin.mailJob.debug", "true"); } - conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.debug"); + conf = (ConfigurationSetting)getConfItems().get("amavisadmin.mailJob.debugSMTP"); if (conf != null && Boolean.getBoolean(conf.getValue())) { mailProperties.setProperty("mail.smtp.debug", "true"); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReminderJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReminderJob.java 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReminderJob.java 2007-01-20 15:47:38 UTC (rev 33) @@ -92,7 +92,9 @@ //qry.setString("email", user.getEmail()); qry.setDate("time_set", reminderDate.getTime()); int mailCount = ((BigInteger)qry.uniqueResult()).intValue(); - prepareMail(user, mailCount); + if (mailCount > 0) { // #1639740 + prepareMail(user, mailCount); + } } /** @@ -166,8 +168,10 @@ context.put("user", user); context.put("appTitle", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); context.put("signature", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); - context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL) + "/"); + context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL)); context.put("mailCount", Integer.valueOf(mailCount)); + // #1639740 + context.put("timeframe", Integer.valueOf(numDays)); Template lostPwd = Velocity.getTemplate("/de/sreindl/amavisadmin/templates/Reminder.vm"); StringWriter w = new StringWriter(); lostPwd.merge(context, w); Modified: amavisadmin/trunk/web/EditSingleJob.jsp =================================================================== --- amavisadmin/trunk/web/EditSingleJob.jsp 2007-01-18 21:53:25 UTC (rev 32) +++ amavisadmin/trunk/web/EditSingleJob.jsp 2007-01-20 15:47:38 UTC (rev 33) @@ -9,7 +9,8 @@ </ui:head> <ui:body binding="#{EditSingleJob.body1}" focus="form1:fldJobName" id="body1"> <jsp:directive.include file="Header.jspf"/> - <ui:form binding="#{EditSingleJob.form1}" id="form1"> + <!-- #1638972 --> + <ui:form binding="#{EditSingleJob.form1}" id="form1" virtualFormsConfig="baseDataForm | | , parameterForm | groupPanel1:gridPanel1:dropDown1 | groupPanel1:gridPanel1:dropDown1"> <ui:panelGroup binding="#{EditSingleJob.groupPanel1}" block="true" id="groupPanel1" style="margin: 5px; padding: 5px; "> <ui:panelGroup binding="#{EditSingleJob.groupPanel2}" id="groupPanel2"> <ui:button action="#{EditSingleJob.btnSave_action}" binding="#{EditSingleJob.btnSave}" id="btnSave" text="Save"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-21 14:45:24
|
Revision: 36 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=36&view=rev Author: streindl Date: 2007-01-21 06:45:25 -0800 (Sun, 21 Jan 2007) Log Message: ----------- Fixes for several small issues and * 1640418 * 1636552 Modified Paths: -------------- amavisadmin/trunk/docs/Makefile amavisadmin/trunk/docs/cust/titlepage.templates.xml amavisadmin/trunk/docs/installationguide.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/RetentionCleanupJob.java amavisadmin/trunk/src/java/hibernate.cfg.xml amavisadmin/trunk/src/java/log4j.properties amavisadmin/trunk/web/EditSingleJob.jsp Added Paths: ----------- amavisadmin/trunk/docs/images amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReleaseMailJob.java amavisadmin/trunk/src/java/de/sreindl/amavisadmin/templates/ReleaseError.vm amavisadmin/trunk/src/java/de/sreindl/amavisadmin/templates/ReleaseSuccess.vm Modified: amavisadmin/trunk/docs/Makefile =================================================================== --- amavisadmin/trunk/docs/Makefile 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/docs/Makefile 2007-01-21 14:45:25 UTC (rev 36) @@ -254,7 +254,7 @@ <xsl:param name="paper.type">A4</xsl:param> \ <xsl:param name="draft.watermark.image"></xsl:param> \ <xsl:param name="hyphenation">false</xsl:param> \ - <xsl:param name="hyphenate.verbatim">1</xsl:param> \ + <xsl:param name="hyphenate.verbatim">0</xsl:param> \ <xsl:param name="alignment">left</xsl:param> \ <xsl:param name="refentry.generate.name">1</xsl:param> \ <xsl:param name="refentry.generate.title">0</xsl:param> \ @@ -365,7 +365,7 @@ # and foo.1.txt from it. .PRECIOUS: %.1 %.2 %.3 %.4 %.5 %.6 %.7 %.8 %.9 -docbook: cust/titlepage.templates.xsl $(DOCBOOK_OUTPUT_FORMATS) +docbook: $(DOCBOOK_OUTPUT_FORMATS) man: $(LISTS_MAN) @@ -383,7 +383,7 @@ txt: $(FILES_TXT) -pdf: $(FILES_PDF) +pdf: cust/titlepage.templates.xsl $(FILES_PDF) info: $(FILES_INFO) Modified: amavisadmin/trunk/docs/cust/titlepage.templates.xml =================================================================== --- amavisadmin/trunk/docs/cust/titlepage.templates.xml 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/docs/cust/titlepage.templates.xml 2007-01-21 14:45:25 UTC (rev 36) @@ -33,17 +33,33 @@ font-family="{$title.fontset}"> <t:titlepage-content t:side="recto" - start-indent="0pt" text-align="center"> - <title t:named-template="component.title" +<!--t:named-template="component.title"--> + <title param:node="ancestor-or-self::article[1]" keep-with-next.within-column="always" + space-before="2cm" font-size="&hsize5;" font-weight="bold"/> - <subtitle/> + <subtitle + keep-with-next.within-column="always" + space-before="2cm" + font-size="&hsize3;" + font-weight="bold" + /> + <author space-before="0.5em" + font-size="&hsize2;"/> + </t:titlepage-content> + + <t:titlepage-content t:side="verso"> + <title + t:named-template="book.verso.title" + font-size="&hsize2;" + font-weight="bold" + font-family="{$title.fontset}"/> <corpauthor space-before="0.5em" font-size="&hsize2;"/> <authorgroup space-before="0.5em" @@ -58,19 +74,10 @@ margin-left="0.5in" margin-right="0.5in" font-family="{$body.fontset}"/> - <pubdate space-before="0.5em"/> <revision space-before="0.5em"/> <revhistory space-before="0.5em"/> - <abstract space-before="0.5em" - text-align="start" - margin-left="0.5in" - margin-right="0.5in" - font-family="{$body.fontset}"/> </t:titlepage-content> - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - <t:titlepage-separator> <fo:block break-after="page"/> </t:titlepage-separator> @@ -79,6 +86,7 @@ </t:titlepage-before> <t:titlepage-before t:side="verso"> + <fo:block break-after="page"/> </t:titlepage-before> </t:titlepage> Added: amavisadmin/trunk/docs/images =================================================================== --- amavisadmin/trunk/docs/images (rev 0) +++ amavisadmin/trunk/docs/images 2007-01-21 14:45:25 UTC (rev 36) @@ -0,0 +1 @@ +link docbook-xsl-1.71.1/images/ \ No newline at end of file Property changes on: amavisadmin/trunk/docs/images ___________________________________________________________________ Name: svn:special + * Modified: amavisadmin/trunk/docs/installationguide.xml =================================================================== --- amavisadmin/trunk/docs/installationguide.xml 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/docs/installationguide.xml 2007-01-21 14:45:25 UTC (rev 36) @@ -6,14 +6,19 @@ ]> <article> <articleinfo> - <title>&aa;</title> + <title>AmavisAdmin</title> + <subtitle>Installation Guide</subtitle> <author> - <firstname>Stephen</firstname> <surname>Reindl</surname> + <firstname>Stephen</firstname> + + <surname>Reindl</surname> + <address><street>Langster Str. 28</street> <postcode>40668</postcode> <city>Meerbusch</city> -<country>Germany></country></address> +<country>Germany></country></address> + <email>sr...@sr...</email> </author> @@ -21,7 +26,9 @@ <copyright> <year>2006</year> + <year>2007</year> + <holder>Stephen Reindl</holder> </copyright> @@ -30,7 +37,8 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at</para> - <para><ulink url="http://www.apache.org/licenses/LICENSE-2.0"/></para> + <para><ulink + url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink></para> <para>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" @@ -38,161 +46,177 @@ implied. See the License for the specific language governing permissions and limitations under the License.</para> </legalnotice> + + <revhistory> + <revision><revnumber>0.1</revnumber><date>2007-01-20</date><authorinitials>sr</authorinitials><revdescription><para>Initial document</para></revdescription></revision> + </revhistory> </articleinfo> <section id="preface"> <title>Preface</title> - <para> - This document describes how to install and use the &aa; tool. In addition - the document describes which tools are necessary to build an developement - platform that is suitable to develop and maintain &aa;. - </para> + <para>This document describes how to install and use the AmavisAdmin tool. + In addition the document describes which tools are necessary to build an + developement platform that is suitable to develop and maintain + AmavisAdmin.</para> - <para> - As &aa; is heavily based on Java and other open platform tools, building - a working production or development environment can be done without - creating any costs (except maybe for hardware, please see below ...). - </para> + <para>As AmavisAdmin is heavily based on Java and other open platform + tools, building a working production or development environment can be + done without creating any costs (except maybe for hardware, please see + below ...).</para> </section> <section id="sec-system-requirements"> <title>System Requirements</title> - <para> - The following requirements have to be met to run &aa; on a Computer: - </para> + <para>The following requirements have to be met to run AmavisAdmin on a + Computer:</para> <itemizedlist> <listitem> - <para> - Java runtime Version 1.5.0 (Tested with 1.5.0-10) from Sun (<ulink - url="http://java.sun.com"></ulink>) - </para> + <para>Java runtime Version 1.5.0 (Tested with 1.5.0-10) from Sun + (<ulink url="http://java.sun.com">http://java.sun.com</ulink>)</para> </listitem> <listitem> - <para> - An java application server. The software has been tested with Apache - Tomcat release <ulink url="http://tomcat.apache.org/">5.5.</ulink> - </para> + <para>An java application server. The software has been tested with + Apache Tomcat release <ulink + url="http://tomcat.apache.org/">5.5.</ulink></para> </listitem> <listitem> - <para> - <ulink url="http://www.ijs.si/software/amavisd/">Amavisd-new</ulink> - as the SPAM and Virus filter engine. At least version 2.4.2 has to - be used. - </para> - - <para> - The Amavisd-new package doesn't need to run on the same machine but - both the database Amavisd-new and a specific TCP port need to be - available to perform neccessary operations. - </para> + <para><ulink + url="http://www.ijs.si/software/amavisd/">Amavisd-new</ulink> as the + SPAM and Virus filter engine. At least version 2.4.2 has to be + used.</para> + + <para>The Amavisd-new package doesn't need to run on the same machine + but both the database Amavisd-new and a specific TCP port need to be + available to perform neccessary operations.</para> </listitem> - + <listitem> - <para> - A Database server where the Amavisd-Server stores it's mails and - &aa; is doing the administration. For development <ulink - url="http://www.postgresql.org">PostgreSQL</ulink> version <ulink - url="http://www.postgresql.org/docs/8.1/static/index.html">8.1</ulink> - is used. - </para> + <para>A Database server where the Amavisd-Server stores it's mails and + AmavisAdmin is doing the administration. For development <ulink + url="http://www.postgresql.org">PostgreSQL</ulink> version <ulink + url="http://www.postgresql.org/docs/8.1/static/index.html">8.1</ulink> + is used.</para> </listitem> - + <listitem> - <para> - The JDBC-driver suitable for your database system. As mentioned - before the development is based on PostgreSQL, therefore the - appropriate driver for the database server is located at <ulink - url="http://jdbc.postgresql.org/" />. - </para> + <para>The JDBC-driver suitable for your database system. As mentioned + before the development is based on PostgreSQL, therefore the + appropriate driver for the database server is located at <ulink + url="http://jdbc.postgresql.org/">http://jdbc.postgresql.org/</ulink>.</para> </listitem> </itemizedlist> </section> - + <section id="sec-downloading-and-installing"> <title>Downloading and installing the components</title> <section id="sec-download-java-sdk"> <title>Java JDK/JRE</title> - <para> - The java package can be installed usually by using standard packages - provided by you operating system vendor (e.g SuSE/OpenSuSE is - providing java packages as part of their distribution) or you can - download them as add-ons either by Sun or by other vendors (IBM, - ...). The following list gives some example of additional packages to - be installed. For further reference please contact your operating - system vendor: - </para> + <para>The java package can be installed usually by using standard + packages provided by you operating system vendor (e.g SuSE/OpenSuSE is + providing java packages as part of their distribution) or you can + download them as add-ons either by Sun or by other vendors (IBM, ...). + The following list gives some example of additional packages to be + installed. For further reference please contact your operating system + vendor:</para> <variablelist> - <varlistentry> - <term><trademark>Microsoft Windows</trademark></term> - <listitem> - <para>On Windows you might use the standard packages downloadable - from <ulink url="http://java.sun.com">Sun's java - pages</ulink>.</para> - </listitem> - </varlistentry> + <varlistentry> + <term><trademark>Microsoft Windows</trademark></term> - <varlistentry> - <term>OpenSuSE</term> - <listitem> - <para>On OpenSuSE the following package needs to be - installed:</para> - <itemizedlist> - <listitem><para>java-1_5_0-sun-1.5.0_update10-2.1</para> - </listitem> - </itemizedlist> - </listitem> - </varlistentry> + <listitem> + <para>On Windows you might use the standard packages downloadable + from <ulink url="http://java.sun.com">Sun's java + pages</ulink>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>OpenSuSE</term> + + <listitem> + <para>On OpenSuSE the following package needs to be + installed:</para> + + <itemizedlist> + <listitem> + <para>java-1_5_0-sun-1.5.0_update10-2.1</para> + </listitem> + </itemizedlist> + </listitem> + </varlistentry> </variablelist> </section> <section id="sec-download-and-install-tomcat"> <title>Apache Tomcat</title> - <para> - Apache Tomcat can be downloaded and installed for various Operating - Systems. For Microsoft Windows and other operating systems and several - Linux distributions there are binary packages available that work - usually out of the box. - </para> - - <para> - For the development and testing Apache Tomcat release 5.5.17 has been - used. The current version 5.5.20 lacks some files for mail handling and - therefore this version has not been taken into consideration as there's - from my point of view no need to install the newer version if the old - version is working fine. - </para> + <para>Apache Tomcat can be downloaded and installed for various + Operating Systems. For Microsoft Windows and other operating systems and + several Linux distributions there are binary packages available that + work usually out of the box.</para> - <para> - Version 5.5.17 of Apache Tomcat can be downloaded for example from - </para> + <para>For the development and testing Apache Tomcat release 5.5.17 has + been used. The current version 5.5.20 lacks some files for mail handling + and therefore this version has not been taken into consideration as + there's from my point of view no need to install the newer version if + the old version is working fine.</para> - <para> - <ulink url="http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/"/> - </para> + <para>Version 5.5.17 of Apache Tomcat can be downloaded for example + from</para> - <para> - You should also look for <ulink - url="http://www.apache.org/dyn/closer.cgi">mirrors</ulink> to reduce - load on the apache servers. - </para> + <para><ulink + url="http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/">http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/</ulink></para> - <para> - After downloading the (usually) binary distribution you can install - tomcat. This is dependend on your operating system and - vendor. Therefore please check the manuals how to install tomcat. You - might find <ulink - url="http://tomcat.apache.org/tomcat-5.5-doc/setup.html" /> an - intersting source of information about how to install tomcat. - </para> + <para>You should also look for <ulink + url="http://www.apache.org/dyn/closer.cgi">mirrors</ulink> to reduce + load on the apache servers.</para> + + <para>After downloading the (usually) binary distribution you can + install tomcat. This is dependend on your operating system and vendor. + Therefore please check the manuals how to install tomcat. You might find + <ulink + url="http://tomcat.apache.org/tomcat-5.5-doc/setup.html">http://tomcat.apache.org/tomcat-5.5-doc/setup.html</ulink> + an intersting source of information about how to install tomcat.</para> </section> + + <section> + <title>Amavisd-new</title> + + <para>The Amavisd-new application can be downloaded from the <ulink + url="http://www.ijs.si/software/amavisd/">Amavisd-new home page</ulink>. + Please ensure to at least use version 2.4.1, as this version is at least + from documentation point of view SQL save according to the current data + model. The following commands taken from the file + <filename>INSTALL</filename> that is part of the Amavisd-new + distribution explains how to download a particular version of the + software:</para> + + <screen><prompt>$ </prompt><userinput>curl -s -S -O http://www.ijs.si/software/amavisd/amavisd-new-<replaceable><version></replaceable></userinput><co id="sc-amavis-curl" /> +<prompt>$ </prompt><userinput>gzip -d -c amavisd-new-<replaceable><version></replaceable>.tar.gz | tar xvf -</userinput> +<computeroutput >amavisd-new-2.4.4 +amavisd-new-2.4.4/README_FILES +amavisd-new-2.4.4/helper-progs +amavisd-new-2.4.4/test-messages +amavisd-new-2.4.4/AAAREADME.first +amavisd-new-2.4.4/INSTALL +... +tar: Read 4608 bytes from -</computeroutput> +<prompt>$ </prompt><userinput>cd amavisd-new-<replaceable><version></replaceable></userinput></screen> + + <calloutlist> + <callout arearefs="sc-amavis-curl"> + <para>Other tools like <command>wget</command> or downloading via + your favourite web browser should work also.</para> + </callout> + </calloutlist> + + </section> </section> -</article> +</article> \ No newline at end of file Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/ApproveRequests.java 2007-01-21 14:45:25 UTC (rev 36) @@ -31,14 +31,23 @@ import com.sun.rave.web.ui.component.TableColumn; import com.sun.rave.web.ui.component.TableRowGroup; import de.sreindl.amavisadmin.bo.ConfigurationBO; +import de.sreindl.amavisadmin.bo.UserBO; +import de.sreindl.amavisadmin.db.MailQueueEntry; +import de.sreindl.amavisadmin.db.MailQueueEntryDAO; +import de.sreindl.amavisadmin.db.MailQueueReceipient; +import de.sreindl.amavisadmin.db.MailQueueReceipientDAO; import de.sreindl.amavisadmin.db.MessageDAO; import de.sreindl.amavisadmin.db.MsgReceipient; import de.sreindl.amavisadmin.db.MsgReceipientDAO; import de.sreindl.amavisadmin.db.MsgReceipientId; import de.sreindl.amavisadmin.db.User; +import de.sreindl.amavisadmin.db.UserDAO; import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; import java.io.IOException; import java.io.StringWriter; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; import javax.faces.FacesException; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; @@ -128,173 +137,173 @@ public void setForm1(Form f) { this.form1 = f; } - + private Table table1 = new Table(); - + public Table getTable1() { return table1; } - + public void setTable1(Table t) { this.table1 = t; } - + private TableRowGroup tableRowGroup1 = new TableRowGroup(); - + public TableRowGroup getTableRowGroup1() { return tableRowGroup1; } - + public void setTableRowGroup1(TableRowGroup trg) { this.tableRowGroup1 = trg; } - + private TableColumn tableColumn1 = new TableColumn(); - + public TableColumn getTableColumn1() { return tableColumn1; } - + public void setTableColumn1(TableColumn tc) { this.tableColumn1 = tc; } - + private StaticText staticText1 = new StaticText(); - + public StaticText getStaticText1() { return staticText1; } - + public void setStaticText1(StaticText st) { this.staticText1 = st; } - + private TableColumn tableColumn2 = new TableColumn(); - + public TableColumn getTableColumn2() { return tableColumn2; } - + public void setTableColumn2(TableColumn tc) { this.tableColumn2 = tc; } - + private StaticText staticText2 = new StaticText(); - + public StaticText getStaticText2() { return staticText2; } - + public void setStaticText2(StaticText st) { this.staticText2 = st; } - + private TableColumn tableColumn3 = new TableColumn(); - + public TableColumn getTableColumn3() { return tableColumn3; } - + public void setTableColumn3(TableColumn tc) { this.tableColumn3 = tc; } - + private Hyperlink hlFrom = new Hyperlink(); - + public Hyperlink getHlFrom() { return hlFrom; } - + public void setHlFrom(Hyperlink h) { this.hlFrom = h; } - + private TableColumn tableColumn4 = new TableColumn(); - + public TableColumn getTableColumn4() { return tableColumn4; } - + public void setTableColumn4(TableColumn tc) { this.tableColumn4 = tc; } - + private Hyperlink hlSubject = new Hyperlink(); - + public Hyperlink getHlSubject() { return hlSubject; } - + public void setHlSubject(Hyperlink h) { this.hlSubject = h; } - + private TableColumn tableColumn5 = new TableColumn(); - + public TableColumn getTableColumn5() { return tableColumn5; } - + public void setTableColumn5(TableColumn tc) { this.tableColumn5 = tc; } - + private StaticText staticText3 = new StaticText(); - + public StaticText getStaticText3() { return staticText3; } - + public void setStaticText3(StaticText st) { this.staticText3 = st; } - + private TableColumn tableColumn6 = new TableColumn(); - + public TableColumn getTableColumn6() { return tableColumn6; } - + public void setTableColumn6(TableColumn tc) { this.tableColumn6 = tc; } - + private Hyperlink hlApprove = new Hyperlink(); - + public Hyperlink getHlApprove() { return hlApprove; } - + public void setHlApprove(Hyperlink h) { this.hlApprove = h; } - + private Hyperlink hlReject = new Hyperlink(); - + public Hyperlink getHlReject() { return hlReject; } - + public void setHlReject(Hyperlink h) { this.hlReject = h; } - + private Button btnBack = new Button(); - + public Button getBtnBack() { return btnBack; } - + public void setBtnBack(Button b) { this.btnBack = b; } - + private PanelGroup groupPanel1 = new PanelGroup(); - + public PanelGroup getGroupPanel1() { return groupPanel1; } - + public void setGroupPanel1(PanelGroup pg) { this.groupPanel1 = pg; } @@ -388,28 +397,28 @@ public void destroy() { HibernateSessionFactory.closeSession(); } - + /** * <p>Return a reference to the scoped data bean.</p> */ protected ApplicationBean1 getApplicationBean1() { return (ApplicationBean1)getBean("ApplicationBean1"); } - + /** * <p>Return a reference to the scoped data bean.</p> */ protected SessionBean1 getSessionBean1() { return (SessionBean1)getBean("SessionBean1"); } - + /** * <p>Return a reference to the scoped data bean.</p> */ protected RequestBean1 getRequestBean1() { return (RequestBean1)getBean("RequestBean1"); } - + /** * <p>Return the content type as a visible representation for the user</p> * <p>The following mappings are performed: @@ -446,14 +455,14 @@ return "Unknown " + content; } } - + public String hlApprove_action() { Session session = HibernateSessionFactory.getSession(); Transaction trx = null; MsgReceipient msgr = null; TableRowDataProvider trdp = (TableRowDataProvider)getBean("currentRow"); if (trdp == null) { - error ("Cannot retrieve current row?"); + error("Cannot retrieve current row?"); return null; } @@ -488,12 +497,12 @@ } return null; } - - + + public String hlFrom_action() { TableRowDataProvider trdp = (TableRowDataProvider)getBean("currentRow"); if (trdp == null) { - error ("internal error - Cannot find current row"); + error("internal error - Cannot find current row"); return null; } String mailId = (String)trdp.getValue("mail_id"); @@ -504,22 +513,22 @@ getSessionBean1().setParameter(SessionBean1.PARAM_PREV_PAGE_ID, "approveRequests"); return "showSingleMail"; } - + public String hlSubject_action() { // same code return hlFrom_action(); } - + public String hlReject_action() { Session session = HibernateSessionFactory.getSession(); Transaction trx = null; MsgReceipient msgr = null; TableRowDataProvider trdp = (TableRowDataProvider)getBean("currentRow"); if (trdp == null) { - error ("Cannot retrieve current row?"); + error("Cannot retrieve current row?"); return null; } - + String mailId = (String)trdp.getValue("mail_id"); Integer rid = (Integer)trdp.getValue("rid"); try { @@ -556,20 +565,43 @@ private void sendRejectionMail(MsgReceipient msgr) { VelocityContext context = new VelocityContext(); + UserDAO dao = new UserDAO(); + List adminUsers = dao.findByAdmin(Boolean.TRUE); + + if (adminUsers.size() == 0) { + warn("Warning: No admin users defined"); + return; + } User currentUser = getSessionBean1().getCurrentUser(); context.put("user", msgr.getRequestUser()); context.put("signature", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); - context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL) + "/"); + context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL)); context.put("message", msgr.getMsgs()); context.put("admin", currentUser); + Session session = HibernateSessionFactory.getSession(); + Transaction trx = session.beginTransaction(); try { Template lostPwd = Velocity.getTemplate("/de/sreindl/amavisadmin/templates/RejectRelease.vm"); StringWriter w = new StringWriter(); lostPwd.merge(context, w); - InternetAddress sender = new InternetAddress(currentUser.getEmail(), currentUser.getFullname()); - InternetAddress receipient = new InternetAddress(msgr.getRequestUser().getEmail(), msgr.getRequestUser().getFullname()); - System.err.println(w.toString()); - //MailHandler.sendMail(sender, receipients, (String) context.get("subject"), w.toString()); + + MailQueueEntry mqe = new MailQueueEntry(); + MailQueueReceipient mqr = new MailQueueReceipient(); + + mqe.setEncoding("text/plain"); + mqe.setStatus(MailQueueEntryDAO.STATUS_NEW); + mqe.setFrom(UserBO.formatMailAddress(currentUser)); + mqe.setMailText(w.toString()); + mqe.setSubject((String)context.get("subject")); + mqe.setReceipients(new HashSet()); + session.save(mqe); + + mqr.setReceipient(UserBO.formatMailAddress(msgr.getRequestUser())); + mqr.setType(MailQueueReceipientDAO.TYPE_TO); + mqe.getReceipients().add(mqr); + mqr.setMailQueueEntry(mqe); + session.save(mqr); + trx.commit(); } catch (Exception ex) { log(ex.getMessage(), ex); getFacesContext().addMessage(null, @@ -577,6 +609,6 @@ ex.getMessage())); } } - + } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditJobs.java 2007-01-21 14:45:25 UTC (rev 36) @@ -36,6 +36,8 @@ import de.sreindl.amavisadmin.jobs.BaseJob; import de.sreindl.amavisadmin.jobs.MailSendJob; import de.sreindl.amavisadmin.jobs.MessagesCleanupJob; +import de.sreindl.amavisadmin.jobs.NewMailNotifierJob; +import de.sreindl.amavisadmin.jobs.ReleaseMailJob; import de.sreindl.amavisadmin.jobs.ReminderJob; import de.sreindl.amavisadmin.jobs.RetentionCleanupJob; import java.io.IOException; @@ -440,7 +442,8 @@ return null; } String jobName = (String)trdp.getValue("job_name"); - getSessionBean1().setParameter("JOB_NAME", jobName); + getSessionBean1().setParameter(EditSingleJob.KEY_JOB_NAME, jobName); + getSessionBean1().setParameter(EditSingleJob.KEY_JOB, null); return "editJob"; } @@ -541,9 +544,16 @@ job.setJobName("New SPAM Mail Notifier"); job.setDescription("Send mails to users about new mails arrived. Please review parameters before enabling this job!"); job.setCronSettings("0 0 7 * * ?"); - job.setJobClass(AdminNotifierJob.class); + job.setJobClass(NewMailNotifierJob.class); job.setEnabled(Boolean.FALSE); session.save(job); + job = new Job(); + job.setJobName("Release Mail Daemon"); + job.setDescription("Job responsible for releasing mails approved by an admin. Please review parameters before enabling this job!"); + job.setCronSettings("0 2/15 * * * ?"); + job.setJobClass(ReleaseMailJob.class); + job.setEnabled(Boolean.FALSE); + session.save(job); trx.commit(); getSessionBean1().getJobsDataProvider().refresh(); StdSchedulerFactory factory = @@ -573,6 +583,8 @@ } public String btnAddNewEntry_action() { + getSessionBean1().setParameter(EditSingleJob.KEY_JOB_NAME, null); + getSessionBean1().setParameter(EditSingleJob.KEY_JOB, null); return "editJob"; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/EditSingleJob.java 2007-01-21 14:45:25 UTC (rev 36) @@ -397,6 +397,46 @@ this.groupPanel2 = pg; } + private Message message3 = new Message(); + + public Message getMessage3() { + return message3; + } + + public void setMessage3(Message m) { + this.message3 = m; + } + + private Message message4 = new Message(); + + public Message getMessage4() { + return message4; + } + + public void setMessage4(Message m) { + this.message4 = m; + } + + private Message message5 = new Message(); + + public Message getMessage5() { + return message5; + } + + public void setMessage5(Message m) { + this.message5 = m; + } + + private Message message6 = new Message(); + + public Message getMessage6() { + return message6; + } + + public void setMessage6(Message m) { + this.message6 = m; + } + // </editor-fold> /** @@ -422,7 +462,6 @@ super.init(); // Perform application initialization that must complete // *before* managed components are initialized - // TODO - add your own initialiation code here // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization"> // Initialize automatically managed components @@ -453,15 +492,34 @@ } } - String[] classes = findJobClasses(); + + Class[] classes = findJobClasses(); Option[] options = new Option[classes.length]; for (int i = 0; i < classes.length; i++) { - options[i] = new Option(classes[i]); + options[i] = new Option(classes[i].getName()); } dropDown1DefaultOptions.setOptions(options); configurationTableEntries = getSessionBean1().getConfigurationTableEntries(); + currentJob = (Job)getSessionBean1().getParameter(KEY_JOB); + if (currentJob == null) { + String jobName = (String)getSessionBean1().getParameter(KEY_JOB_NAME); + if (jobName != null) { + JobDAO dao = new JobDAO(); + currentJob = dao.findById(jobName); + if (currentJob == null) { + error("Cannot find job " + jobName); + currentJob = new Job(); + currentJob.setJobName(jobName); + } + } else { + currentJob = new Job(); + } + loadConfigData(); + getSessionBean1().setParameter(KEY_JOB, currentJob); + } + } /** @@ -472,7 +530,6 @@ * resources that will be required in your event handlers.</p> */ public void preprocess() { - String jobName = (String)getSessionBean1().getParameter("JOB_NAME"); } /** @@ -484,42 +541,7 @@ * this page.</p> */ public void prerender() { - // regular startup - String jobName = (String)getSessionBean1().getParameter("JOB_NAME"); - this.erase(); - if (jobName != null) { - JobDAO dao = new JobDAO(); - Job currentJob = dao.findById(jobName); - fldJobName.setText(currentJob.getJobName()); - fldDescription.setText(currentJob.getDescription()); - fldCRONSchedule.setText(currentJob.getCronSettings()); - dropDown1.setValue(currentJob.getJobClass().getName()); - chkEnabled.setSelected(currentJob.getEnabled()); - try { - BaseJob job = (BaseJob)currentJob.getJobClass().newInstance(); - ArrayList<ConfigurationDataEntry> entries = - job.getConfigurationDataTable(); - // add job's configuration entries to array - Iterator<ConfigurationDataEntry> iKeys = entries.iterator(); - while (iKeys.hasNext()) { - ConfigurationDataEntry entry = iKeys.next(); - if (currentJob.getConfItems().containsKey(entry.getKey())) { - ConfigurationSetting confEntry = - (ConfigurationSetting)currentJob.getConfItems().get(entry.getKey()); - entry.setValue(confEntry.getValue()); - } - } - ConfigurationDataEntry[] deArray = - entries.toArray(new ConfigurationDataEntry[entries.size()]); - configurationTableEntries.setArray(deArray); - } catch (InstantiationException ie) { - log("Error ", ie); - } catch (IllegalAccessException iae) { - log("Error ", iae); - } - } else { - configurationTableEntries.setArray(null); - } + dropDown1.setSelected(currentJob.getJobClass().getName()); } /** @@ -620,8 +642,8 @@ return url; } - private String[] findJobClasses() { - ArrayList jobs = new ArrayList(); + private Class[] findJobClasses() { + ArrayList<Class> jobs = new ArrayList<Class>(); Package[] packages = Package.getPackages(); for (int i = 0 ; i < packages.length; i++) { try { @@ -633,32 +655,21 @@ } if (sup != null) { // found - jobs.add(classes[clazz].getName()); + jobs.add(classes[clazz]); } } } catch(ClassNotFoundException cnfe) { System.err.println("Cannot find package " + packages[i].getName()); } } - String[] result = new String[jobs.size()]; - return (String[]) jobs.toArray(result); + return jobs.toArray(new Class[jobs.size()]); } public String btnSave_action() { - String jobName = (String)getSessionBean1().getParameter("JOB_NAME"); - getSessionBean1().setParameter("JOB_NAME", null); - Job currentJob = null; - if (jobName != null) { - JobDAO dao = new JobDAO(); - currentJob = dao.findById(jobName); - } else { - currentJob = new Job(); - } - currentJob.setJobName((String)fldJobName.getText()); - currentJob.setDescription((String)fldDescription.getText()); - currentJob.setCronSettings((String)fldCRONSchedule.getText()); - String className = (String)dropDown1.getValue(); + getSessionBean1().setParameter(KEY_JOB_NAME, null); + getSessionBean1().setParameter(KEY_JOB, null); + String className = (String) dropDown1.getValue(); try { Class clazz = Class.forName(className); currentJob.setJobClass(clazz); @@ -667,26 +678,18 @@ log(cnfe.getMessage(), cnfe); return null; } - currentJob.setEnabled(Boolean.valueOf(chkEnabled.isChecked())); Session session = null; Transaction trx = null; try { session = HibernateSessionFactory.getSession(); trx = session.beginTransaction(); // save job - if (currentJob.getConfItems() != null) { - currentJob.getConfItems().clear(); - } else { - currentJob.setConfItems(new HashMap()); - } if (currentJob.getVersion() == null) { session.save(currentJob); } else { session.update(currentJob); } - currentJob.setConfItems(new HashMap()); - saveConfEntries(currentJob, - (ConfigurationDataEntry[])configurationTableEntries.getArray()); + saveConfEntries(currentJob, configurationTableEntries); trx.commit(); // refresh data set getSessionBean1().getJobsDataProvider().refresh(); @@ -714,6 +717,8 @@ } public String btnCancel_action() { + getSessionBean1().setParameter(KEY_JOB_NAME, null); + getSessionBean1().setParameter(KEY_JOB, null); return "goBack"; } @@ -763,42 +768,50 @@ return null; } - private void saveConfEntries(Job currentJob, ConfigurationDataEntry[] confEntries) { + private void saveConfEntries(Job currentJob, ConfigurationDataTable confEntries) { Session session = HibernateSessionFactory.getSession(); - for (int i = 0; i < confEntries.length; i++) { + ConfigurationDataEntry[] entries = + (ConfigurationDataEntry[]) confEntries.getArray(); + for (int i = 0; i < entries.length; i++) { // #1638972 - ConfigurationDataEntry ent = confEntries[i]; + ConfigurationDataEntry ent = entries[i]; ConfigurationSettingId key = new ConfigurationSettingId(ent.getKey(), currentJob); ConfigurationSetting conf = (ConfigurationSetting)session.get(ConfigurationSetting.class, key); - if (conf == null) { - conf = new ConfigurationSetting(key, ent.getValue()); + //#1640418 + if (ent.getValue() != null) { + if (conf == null) { + conf = new ConfigurationSetting(key, ent.getValue()); + session.save(conf); + } else { + conf.setValue(ent.getValue()); + session.update(conf); + } + } else { + if (conf != null) { + // delete old entry + session.delete(conf); + } } - conf.setValue(ent.getValue()); - session.save(conf); currentJob.getConfItems().put(ent.getKey(), conf); } } public void dropDown1_processValueChange(ValueChangeEvent event) { + String className = (String)dropDown1.getValue(); try { - String className = (String)dropDown1.getValue(); Class clazz = Class.forName(className); - BaseJob job = (BaseJob)clazz.newInstance(); - ArrayList<ConfigurationDataEntry> entries = - job.getConfigurationDataTable(); - ConfigurationDataEntry[] deArray = - entries.toArray(new ConfigurationDataEntry[entries.size()]); - configurationTableEntries.setArray(deArray); - } catch (ClassNotFoundException cnfe) { - log("Error ", cnfe); - } catch (InstantiationException ie) { - log("Error ", ie); - } catch (IllegalAccessException iae) { - log("Error ", iae); + currentJob.setJobClass(clazz); + } catch (ClassNotFoundException e) { + fatal("Class " + className + " not found even if looked up in object code"); + return; } + if (currentJob.getConfItems() == null) { + currentJob.setConfItems(new HashMap()); + } + loadConfigData(); } /** @@ -846,5 +859,69 @@ return defaultValue == null || defaultValue.length() == 0; } + private void loadConfigData() { + try { + Class clazz = currentJob.getJobClass(); + if (clazz == null) { + // take class from from first element in list as this + // happens only on new jobs. + String className = + (String) dropDown1DefaultOptions.getOptions()[0].getValue(); + clazz = Class.forName(className); + currentJob.setJobClass(clazz); + } + BaseJob job = (BaseJob)clazz.newInstance(); + ArrayList<ConfigurationDataEntry> entries = + job.getConfigurationDataTable(); + // add job's configuration entries to array + Iterator<ConfigurationDataEntry> iKeys = entries.iterator(); + while (iKeys.hasNext()) { + ConfigurationDataEntry entry = iKeys.next(); + if (currentJob.getConfItems().containsKey(entry.getKey())) { + ConfigurationSetting confEntry = + (ConfigurationSetting)currentJob.getConfItems().get(entry.getKey()); + entry.setValue(confEntry.getValue()); + } + } + ConfigurationDataEntry[] deArray = + entries.toArray(new ConfigurationDataEntry[entries.size()]); + configurationTableEntries.setArray(deArray); + } catch (ClassNotFoundException ie) { + log("Error ", ie); + } catch (InstantiationException ie) { + log("Error ", ie); + } catch (IllegalAccessException iae) { + log("Error ", iae); + } + } + + /** + * Holds value of property currentJob. + */ + private Job currentJob; + + /** + * Getter for property currentJob. + * @return Value of property currentJob. + */ + public Job getCurrentJob() { + return this.currentJob; + } + + /** + * Setter for property currentJob. + * @param currentJob New value of property currentJob. + */ + public void setCurrentJob(Job currentJob) { + this.currentJob = currentJob; + } + + /** Session key for the job name to be handled */ + public static final String KEY_JOB_NAME = "editSinglePage.JOB_NAME"; + /** Session key for the current job being edited */ + public static final String KEY_JOB = "editSinglePage.JOB"; + + /** Job name used to identify, that a new job is going to be created */ + public static final String KEY_CREATE_TOKEN = "$$Create"; } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/HandlePendingReleases.java 2007-01-21 14:45:25 UTC (rev 36) @@ -32,6 +32,11 @@ import com.sun.rave.web.ui.component.TableRowGroup; import de.sreindl.amavisadmin.bo.ConfigurationBO; import de.sreindl.amavisadmin.bo.MailHandler; +import de.sreindl.amavisadmin.bo.UserBO; +import de.sreindl.amavisadmin.db.MailQueueEntry; +import de.sreindl.amavisadmin.db.MailQueueEntryDAO; +import de.sreindl.amavisadmin.db.MailQueueReceipient; +import de.sreindl.amavisadmin.db.MailQueueReceipientDAO; import de.sreindl.amavisadmin.db.MsgReceipient; import de.sreindl.amavisadmin.db.MsgReceipientDAO; import de.sreindl.amavisadmin.db.MsgReceipientId; @@ -41,6 +46,7 @@ import java.io.IOException; import java.io.StringWriter; import java.sql.SQLException; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import javax.faces.FacesException; @@ -242,13 +248,13 @@ public void setBtnRevert(Button b) { this.btnRevert = b; } - + private PanelGroup groupPanel1 = new PanelGroup(); - + public PanelGroup getGroupPanel1() { return groupPanel1; } - + public void setGroupPanel1(PanelGroup pg) { this.groupPanel1 = pg; } @@ -478,31 +484,46 @@ */ private void sendRequestMailToAdmins(int requestsReleased) { VelocityContext context = new VelocityContext(); + UserDAO dao = new UserDAO(); + List adminUsers = dao.findByAdmin(Boolean.TRUE); + + if (adminUsers.size() == 0) { + warn("Warning: No admin users defined"); + return; + } context.put("user", getSessionBean1().getCurrentUser()); context.put("signature", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); - context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL) + "/"); + context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL)); context.put("newRequestCount", new Integer(requestsReleased)); context.put("totalReqCount", new Integer(getSessionBean1().getPendingReleases())); + Session session = HibernateSessionFactory.getSession(); + Transaction trx = session.beginTransaction(); try { Template lostPwd = Velocity.getTemplate("/de/sreindl/amavisadmin/templates/RequestRelease.vm"); StringWriter w = new StringWriter(); lostPwd.merge(context, w); - UserDAO udao = new UserDAO(); - List admins = udao.findByAdmin(Boolean.TRUE); - InternetAddress sender = new InternetAddress(ConfigurationBO.getConfValue(ConfigurationBO.MAIL_SENDER)); - InternetAddress[] receipients = new InternetAddress[admins.size()]; - Iterator i = admins.iterator(); - int cnt = 0; + + MailQueueEntry mqe = new MailQueueEntry(); + + mqe.setEncoding("text/plain"); + mqe.setStatus(MailQueueEntryDAO.STATUS_NEW); + mqe.setFrom(UserBO.formatMailAddress(getSessionBean1().getCurrentUser())); + mqe.setMailText(w.toString()); + mqe.setSubject((String)context.get("subject")); + mqe.setReceipients(new HashSet()); + session.save(mqe); + + Iterator i = adminUsers.iterator(); while (i.hasNext()) { - User admin = (User)i.next(); - receipients[cnt] = new InternetAddress(admin.getEmail()); - if (admin.getFullname() != null) { - receipients[cnt].setPersonal(admin.getFullname()); - } - cnt++; + User user = (User)i.next(); + MailQueueReceipient mqr = new MailQueueReceipient(); + mqr.setReceipient(UserBO.formatMailAddress(user)); + mqr.setType(MailQueueReceipientDAO.TYPE_TO); + mqe.getReceipients().add(mqr); + mqr.setMailQueueEntry(mqe); + HibernateSessionFactory.getSession().save(mqr); } - System.err.println(w.toString()); - //MailHandler.sendMail(sender, receipients, (String) context.get("subject"), w.toString()); + trx.commit(); } catch (Exception ex) { log(ex.getMessage(), ex); getFacesContext().addMessage(null, Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/MyRequests.java 2007-01-21 14:45:25 UTC (rev 36) @@ -475,7 +475,7 @@ return "SPAM (" + ((spam_level != null) ? spam_level.toString() : "unknown") + ")"; case MessageDAO.CONTENT_VIRUS: String smtpResp = (String)trdp.getValue("smtp_resp"); - return "VIRUS " + smtpResp.substring(smtpResp.indexOf("VIRUS: ")+7) + ")"; + return "VIRUS " + smtpResp.substring(smtpResp.indexOf("VIRUS: ")+7); case MessageDAO.CONTENT_BLOCKED: return "Banned"; default: Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/SessionBean1.java 2007-01-21 14:45:25 UTC (rev 36) @@ -73,7 +73,7 @@ approvePendingRowSet.setTableName("msgrcpt"); approvePendingDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet)getValue("#{SessionBean1.approvePendingRowSet}")); jobsRowSet.setDataSourceName("java:comp/env/jdbc/amavisDB"); - jobsRowSet.setCommand("SELECT ALL PUBLIC.jobs.job_name, \n PUBLIC.jobs.job_description, \n PUBLIC.jobs.job_cron_settings, \n PUBLIC.jobs.job_class, \n PUBLIC.jobs.job_enabled, \n PUBLIC.jobs.job_last_run_date \nFROM PUBLIC.jobs\nWHERE PUBLIC.jobs.job_special = 'false'\nORDER BY PUBLIC.jobs.job_name ASC "); + jobsRowSet.setCommand("SELECT ALL job_name, \n job_description, \n job_cron_settings, \n job_class, \n job_enabled, \n job_last_run_date \nFROM PUBLIC.job\nWHERE job_special = 'false'\nORDER BY job_name ASC "); jobsRowSet.setTableName("jobs"); jobsDataProvider.setCachedRowSet((javax.sql.rowset.CachedRowSet)getValue("#{SessionBean1.jobsRowSet}")); } Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/bo/ConfigurationBO.java 2007-01-21 14:45:25 UTC (rev 36) @@ -98,8 +98,8 @@ if (log.isDebugEnabled()) { log.debug("setValue (" + key + ", " + value + ")"); } - JobDAO dao = new JobDAO(); - Job globalJob = dao.findById(GLOBAL_JOB); + JobDAO dao = new JobDAO(); + Job globalJob = dao.findById(GLOBAL_JOB); if (confMap != null) { ConfigurationSetting c = (ConfigurationSetting)confMap.get(key); if (c == null) { @@ -139,8 +139,27 @@ if (c == null) { c = new ConfigurationSetting(new ConfigurationSettingId(key, globalJob)); } - c.setValue(((ConfigurationSetting)confMap.get(key)).getValue()); - sess.saveOrUpdate(c); + //#1640418 + String value = ((ConfigurationSetting)confMap.get(key)).getValue(); + if (value == null) { + // remove old entry if exist + if (c.getVersion() != null) { + // data exists in database + sess.delete(c); + } + } else { // new or chagned value + if (c.getValue() != null) { // old value exists + if (!c.getValue().equals(value)) { + // update only in case of changed data + c.setValue(value); + sess.saveOrUpdate(c); + } + } else { + // new entry + c.setValue(value); + sess.save(c); + } + } } trx.commit(); HibernateSessionFactory.closeSession(); Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/Job.hbm.xml 2007-01-21 14:45:25 UTC (rev 36) @@ -18,7 +18,7 @@ --> <hibernate-mapping> <!-- #1640285 --> - <class name="de.sreindl.amavisadmin.db.Job" table="job" schema="public"> + <class name="de.sreindl.amavisadmin.db.Job" table="job" schema="public" lazy="false"> <id name="jobName"> <column name="job_name" length="64" /> <generator class="assigned" /> @@ -40,7 +40,8 @@ <map name="confItems" inverse="true" - cascade="all"> + cascade="all" + lazy="false"> <key column="job_ref"/> <map-key column="key" type="string" /> Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/db/MsgReceipientDAO.java 2007-01-21 14:45:25 UTC (rev 36) @@ -187,6 +187,11 @@ public static final Character RS_RELEASED = 'R'; /** + * There has been an error during release. + */ + public static final Character RS_RELEASE_ERROR = 'E'; + + /** * Message is marked for deletion */ public static final Character RS_DELETED = 'D'; Modified: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java 2007-01-20 16:51:50 UTC (rev 35) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/AdminNotifierJob.java 2007-01-21 14:45:25 UTC (rev 36) @@ -99,7 +99,7 @@ } context.put("appTitle", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); context.put("signature", ConfigurationBO.getConfValue(ConfigurationBO.APP_TITLE)); - context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL) + "/"); + context.put("baselink", ConfigurationBO.getConfValue(ConfigurationBO.CONF_BASE_URL)); context.put("requestCount", Integer.valueOf(requestCount)); Template lostPwd = Velocity.getTemplate("/de/sreindl/amavisadmin/templates/AdminNotifier.vm"); StringWriter w = new StringWriter(); Added: amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReleaseMailJob.java =================================================================== --- amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReleaseMailJob.java (rev 0) +++ amavisadmin/trunk/src/java/de/sreindl/amavisadmin/jobs/ReleaseMailJob.java 2007-01-21 14:45:25 UTC (rev 36) @@ -0,0 +1,413 @@ +/* + * Copyright (C) 2007 Stephen Reindl. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.sreindl.amavisadmin.jobs; + +import de.sreindl.amavisadmin.bo.ConfigurationBO; +import de.sreindl.amavisadmin.bo.UserBO; +import de.sreindl.amavisadmin.bo.configuration.ConfigurationDataEntry; +import de.sreindl.amavisadmin.db.ConfigurationSetting; +import de.sreindl.amavisadmin.db.MailQueueEntry; +import de.sreindl.amavisadmin.db.MailQueueEntryDAO; +import de.sreindl.amavisadmin.db.MailQueueReceipient; +import de.sreindl.amavisadmin.db.MailQueueReceipientDAO; +import de.sreindl.amavisadmin.db.MsgReceipient; +import de.sreindl.amavisadmin.db.MsgReceipientDAO; +import de.sreindl.amavisadmin.db.User; +import de.sreindl.amavisadmin.db.UserDAO; +import de.sreindl.amavisadmin.db.util.HibernateSessionFactory; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.io.StringWriter; +import java.net.InetAddress; +import java.net.Socket; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.quartz.JobExecutionContext; + +/** + * This job is responsible releasing messages to the recipients. + * + * <p>This job is selecting information from msgrcpt table where RS='W' and + * call amavisd-new to release those messages. + * + * @author sreindl... [truncated message content] |
From: <str...@us...> - 2007-01-24 17:52:35
|
Revision: 44 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=44&view=rev Author: streindl Date: 2007-01-24 09:52:29 -0800 (Wed, 24 Jan 2007) Log Message: ----------- Refactoring of webapp package Added Paths: ----------- amavisadmin/trunk/webapp/ amavisadmin/trunk/webapp/build.xml amavisadmin/trunk/webapp/catalog.xml amavisadmin/trunk/webapp/lib/ amavisadmin/trunk/webapp/lib/complibs/ amavisadmin/trunk/webapp/nbproject/ amavisadmin/trunk/webapp/src/ amavisadmin/trunk/webapp/test/ amavisadmin/trunk/webapp/web/ Removed Paths: ------------- amavisadmin/trunk/build.xml amavisadmin/trunk/catalog.xml amavisadmin/trunk/lib/ amavisadmin/trunk/nbproject/ amavisadmin/trunk/src/ amavisadmin/trunk/test/ amavisadmin/trunk/web/ amavisadmin/trunk/webapp/lib/complibs/ Deleted: amavisadmin/trunk/build.xml =================================================================== --- amavisadmin/trunk/build.xml 2007-01-24 17:49:44 UTC (rev 43) +++ amavisadmin/trunk/build.xml 2007-01-24 17:52:29 UTC (rev 44) @@ -1,119 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- You may freely edit this file. See commented blocks below for --> -<!-- some examples of how to customize the build. --> -<!-- (If you delete it and reopen the project it will be recreated.) --> -<project name="SPAMAdmin" default="default" basedir="."> - <description>Builds, tests, and runs the project SPAMAdmin.</description> - <import file="nbproject/build-impl.xml"/> - - <import file="nbproject/profiler-build-impl.xml"/> <!-- - - There exist several targets which are by default empty and which can be - used for execution of your tasks. These targets are usually executed - before and after some main targets. They are: - - -pre-init: called before initialization of project properties - -post-init: called after initialization of project properties - -pre-compile: called before javac compilation - -post-compile: called after javac compilation - -pre-compile-single: called before javac compilation of single file - -post-compile-single: called after javac compilation of single file - -pre-compile-test: called before javac compilation of JUnit tests - -post-compile-test: called after javac compilation of JUnit tests - -pre-compile-test-single: called before javac compilation of single JUnit test - -post-compile-test-single: called after javac compilation of single JUunit test - -pre-dist: called before jar building - -post-dist: called after jar building - -post-clean: called after cleaning build products - -pre-run-deploy: called before deploying - -post-run-deploy: called after deploying - - Example of pluging an obfuscator after the compilation could look like - - <target name="post-compile"> - <obfuscate> - <fileset dir="${build.classes.dir}"/> - </obfuscate> - </target> - - For list of available properties check the imported - nbproject/build-impl.xml file. - - - Other way how to customize the build is by overriding existing main targets. - The target of interest are: - - init-macrodef-javac: defines macro for javac compilation - init-macrodef-junit: defines macro for junit execution - init-macrodef-debug: defines macro for class debugging - do-dist: jar archive building - run: execution of project - javadoc-build: javadoc generation - - Example of overriding the target for project execution could look like - - <target name="run" depends="<PROJNAME>-impl.jar"> - <exec dir="bin" executable="launcher.exe"> - <arg file="${dist.jar}"/> - </exec> - </target> - - Notice that overridden target depends on jar target and not only on - compile target as regular run target does. Again, for list of available - properties which you can use check the target you are overriding in - nbproject/build-impl.xml file. - - --> - <!-- <target name="-post-compile"> - <taskdef name="schemaexport" - classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" - classpath="${build.classes.dir}:${javac.classpath}"/> - <schemaexport - config="src/java/hibernate.cfg.xml" - quiet="no" - text="yes" - drop="no" - delimiter=";" - output="build/schema-export.sql"> - </schemaexport> - </target>--> - - <!-- Build amavisadmin.properties for build and version information --> - <target name="-post-compile"> - <tstamp> - <format property="build.timestamp" - pattern="yyyyMMdd'T'HHmmssZ" locale="en"/> - </tstamp> - <exec executable="/usr/bin/perl"> - <arg value="tools/reposInfo.pl" /> - <redirector output="reposinfo.properties" /> - </exec> - <copy file="${src.dir}/amavisadmin.properties.in" - tofile="${build.classes.dir}/amavisadmin.properties" - filtering="true" overwrite="true"> - <filterset> - <filtersfile file="reposinfo.properties" /> - <filter token="TSTAMP" value="${build.timestamp}" /> - </filterset> - </copy> - <delete file="reposinfo.properties" /> - </target> - - <target name="-pre-dist"> - <copy file="LICENSE" - tofile="${build.web.dir}/LICENSE" - filtering="false" overwrite="true"> - </copy> - </target> - - <target name="schemaupdate"> - <taskdef name="schemaupdate" - classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" - classpath="${build.classes.dir}:${javac.classpath}"/> - - <schemaupdate - config="src/java/hibernate.cfg.xml" - quiet="no" - text="yes" /> - </target> -</project> Deleted: amavisadmin/trunk/catalog.xml =================================================================== Copied: amavisadmin/trunk/webapp/build.xml (from rev 39, amavisadmin/trunk/build.xml) =================================================================== --- amavisadmin/trunk/webapp/build.xml (rev 0) +++ amavisadmin/trunk/webapp/build.xml 2007-01-24 17:52:29 UTC (rev 44) @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See commented blocks below for --> +<!-- some examples of how to customize the build. --> +<!-- (If you delete it and reopen the project it will be recreated.) --> +<project name="SPAMAdmin" default="default" basedir="."> + <description>Builds, tests, and runs the project SPAMAdmin.</description> + <import file="nbproject/build-impl.xml"/> + + <import file="nbproject/profiler-build-impl.xml"/> <!-- + + There exist several targets which are by default empty and which can be + used for execution of your tasks. These targets are usually executed + before and after some main targets. They are: + + -pre-init: called before initialization of project properties + -post-init: called after initialization of project properties + -pre-compile: called before javac compilation + -post-compile: called after javac compilation + -pre-compile-single: called before javac compilation of single file + -post-compile-single: called after javac compilation of single file + -pre-compile-test: called before javac compilation of JUnit tests + -post-compile-test: called after javac compilation of JUnit tests + -pre-compile-test-single: called before javac compilation of single JUnit test + -post-compile-test-single: called after javac compilation of single JUunit test + -pre-dist: called before jar building + -post-dist: called after jar building + -post-clean: called after cleaning build products + -pre-run-deploy: called before deploying + -post-run-deploy: called after deploying + + Example of pluging an obfuscator after the compilation could look like + + <target name="post-compile"> + <obfuscate> + <fileset dir="${build.classes.dir}"/> + </obfuscate> + </target> + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Other way how to customize the build is by overriding existing main targets. + The target of interest are: + + init-macrodef-javac: defines macro for javac compilation + init-macrodef-junit: defines macro for junit execution + init-macrodef-debug: defines macro for class debugging + do-dist: jar archive building + run: execution of project + javadoc-build: javadoc generation + + Example of overriding the target for project execution could look like + + <target name="run" depends="<PROJNAME>-impl.jar"> + <exec dir="bin" executable="launcher.exe"> + <arg file="${dist.jar}"/> + </exec> + </target> + + Notice that overridden target depends on jar target and not only on + compile target as regular run target does. Again, for list of available + properties which you can use check the target you are overriding in + nbproject/build-impl.xml file. + + --> + <!-- <target name="-post-compile"> + <taskdef name="schemaexport" + classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" + classpath="${build.classes.dir}:${javac.classpath}"/> + <schemaexport + config="src/java/hibernate.cfg.xml" + quiet="no" + text="yes" + drop="no" + delimiter=";" + output="build/schema-export.sql"> + </schemaexport> + </target>--> + + <!-- Build amavisadmin.properties for build and version information --> + <target name="-post-compile"> + <tstamp> + <format property="build.timestamp" + pattern="yyyyMMdd'T'HHmmssZ" locale="en"/> + </tstamp> + <exec executable="/usr/bin/perl"> + <arg value="tools/reposInfo.pl" /> + <redirector output="reposinfo.properties" /> + </exec> + <copy file="${src.dir}/amavisadmin.properties.in" + tofile="${build.classes.dir}/amavisadmin.properties" + filtering="true" overwrite="true"> + <filterset> + <filtersfile file="reposinfo.properties" /> + <filter token="TSTAMP" value="${build.timestamp}" /> + </filterset> + </copy> + <delete file="reposinfo.properties" /> + </target> + + <target name="-pre-dist"> + <copy file="LICENSE" + tofile="${build.web.dir}/LICENSE" + filtering="false" overwrite="true"> + </copy> + </target> + + <target name="schemaupdate"> + <taskdef name="schemaupdate" + classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" + classpath="${build.classes.dir}:${javac.classpath}"/> + + <schemaupdate + config="src/java/hibernate.cfg.xml" + quiet="no" + text="yes" /> + </target> +</project> Copied: amavisadmin/trunk/webapp/catalog.xml (from rev 43, amavisadmin/trunk/catalog.xml) =================================================================== Copied: amavisadmin/trunk/webapp/lib (from rev 39, amavisadmin/trunk/lib) Copied: amavisadmin/trunk/webapp/lib/complibs (from rev 43, amavisadmin/trunk/lib/complibs) Copied: amavisadmin/trunk/webapp/nbproject (from rev 43, amavisadmin/trunk/nbproject) Copied: amavisadmin/trunk/webapp/src (from rev 43, amavisadmin/trunk/src) Copied: amavisadmin/trunk/webapp/test (from rev 43, amavisadmin/trunk/test) Copied: amavisadmin/trunk/webapp/web (from rev 43, amavisadmin/trunk/web) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-25 20:25:59
|
Revision: 50 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=50&view=rev Author: streindl Date: 2007-01-25 12:25:43 -0800 (Thu, 25 Jan 2007) Log Message: ----------- Initial build script process ready Modified Paths: -------------- amavisadmin/trunk/tools/build_script.pl amavisadmin/trunk/tools/reposInfo.pl amavisadmin/trunk/webapp/build.xml amavisadmin/trunk/webapp/src/java/amavisadmin.properties.in amavisadmin/trunk/webapp/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java Added Paths: ----------- amavisadmin/trunk/AUTHORS amavisadmin/trunk/NOTES amavisadmin/trunk/README amavisadmin/trunk/TODO amavisadmin/trunk/tools/version.pm Added: amavisadmin/trunk/AUTHORS =================================================================== --- amavisadmin/trunk/AUTHORS (rev 0) +++ amavisadmin/trunk/AUTHORS 2007-01-25 20:25:43 UTC (rev 50) @@ -0,0 +1,2 @@ +Stephen Reindl <sr...@sr...> +Project Lead and Maintainer Added: amavisadmin/trunk/NOTES =================================================================== --- amavisadmin/trunk/NOTES (rev 0) +++ amavisadmin/trunk/NOTES 2007-01-25 20:25:43 UTC (rev 50) @@ -0,0 +1 @@ +... please read the LICENSE and README files for details Added: amavisadmin/trunk/README =================================================================== --- amavisadmin/trunk/README (rev 0) +++ amavisadmin/trunk/README 2007-01-25 20:25:43 UTC (rev 50) @@ -0,0 +1,11 @@ +AmavisAdmin +=========== + +This tool helps administrating data stored by Amavisd-new in an Postgres SQL +database. + +... more to come + +for installation details, please refer to docs/txt/installationguide.txt. + + Added: amavisadmin/trunk/TODO =================================================================== --- amavisadmin/trunk/TODO (rev 0) +++ amavisadmin/trunk/TODO 2007-01-25 20:25:43 UTC (rev 50) @@ -0,0 +1,20 @@ +The following things are open -*- outline -*- + +* User Interface + The user interface might be overhauled or even replaced by something + different than now. Currently the user interface is build on Rave, an WebUI + based on JSF/JSP by Sun/Netbeans + +* Database +** Support for Black/Whitelisting +** Support for MySQL + +* Security +** Role based security settings +** JAAS enabled login (for enterprise integration) + +* Documentation +* User Guide + +* ... more to come + Modified: amavisadmin/trunk/tools/build_script.pl =================================================================== --- amavisadmin/trunk/tools/build_script.pl 2007-01-24 22:06:31 UTC (rev 49) +++ amavisadmin/trunk/tools/build_script.pl 2007-01-25 20:25:43 UTC (rev 50) @@ -1,31 +1,57 @@ #!/usr/bin/perl -w -# Script to create a target distribution +# Script to create a target distribution # -# it creates a directory dist in the current directory and compiles a ready to use -# war file, database scripts and compiled documentation as well as API + +# it creates a directory dist in the current directory and compiles a ready to +# use war file, database scripts and compiled documentation as well as API # documentation into this folder. use strict; use English; + +BEGIN { + push @INC, "tools"; # for the version stuff +} + +use version; + use Getopt::Long; use Pod::Usage; + +use Archive::Tar; use File::Path; use File::stat; +use File::Basename; +use File::Find; +use File::Copy; + use Cwd; + +use Date::Format; + use SVN::Client; +sub createTar(); +sub copy_dir($); sub replaceParams(); +sub copy_file($$); +sub copy_doc_dir(); +sub create_file_list(); -my $distdir = "dist"; +my $distdir = "%p-v%V"; my $cleandir = 0; my $help=0; my $man=0; +my $compressbzip2 = 0; +my $compressgzip = 0; my $createtar=undef; GetOptions("path|p=s" => \$distdir, "tar|t:s" => \$createtar, "clean|c!" => \$cleandir, + "bzip2" => \$compressbzip2, + "gzip" => \$compressgzip, "help|h" => \$help, "man|m" => \$man) or pod2usage (2); pod2usage(1) if ($help); @@ -38,7 +64,7 @@ $_info = $info; }; -my $modified = 0; +my $modified = ""; my $funcStatus = sub { $modified = "-modified"; @@ -63,10 +89,32 @@ replaceParams(); -print $distdir, "\n"; +if (defined $createtar) { + if ($createtar eq "") { + $createtar = $distdir . ".tar"; + } +} +my $tempdir = "$distdir/temp"; -exit 0; +my %files = ("LICENSE" => "LICENSE", + "README" => "README", + "TODO" => "TODO", + "NOTES" => "NOTES", + "AUTHORS" => "AUTHORS", + "$tempdir/AmavisAdmin.war" => "AmavisAdmin.war", + "\@db" => "db", + "$tempdir/docs/installationguide.pdf" => "docs/pdf/installationguide.pdf", + "$tempdir/docs/installationguide.txt" => "docs/txt/installationguide.txt", + "\!$tempdir/docs/installationguide/" => 'docs/html/installationguide/', + ); + + +print "Output to $distdir\n"; +if (defined $createtar) { + print "Creating tar file $createtar\n"; +} + if (-d "$distdir") { if ($cleandir) { my $stat = stat($distdir); @@ -84,12 +132,181 @@ mkpath ($distdir) or die "Cannot create directory $distdir"; +# step 0 +# create intermediate directories which will be deleted afterwards +mkdir $tempdir; + +# step 1: run ant +my @antArgs=("-Dbuild.dir=" . getcwd() . "/$tempdir", + "-Ddist.dir=" . getcwd() . "/$tempdir", + "-buildfile", "webapp/build.xml", + "clean", + "dist"); + +system "ant", @antArgs; + +if ($? != 0) { + die "Build failed. Please check before continuing"; +} + +# step 2: documentation +copy_doc_dir (); +system "cd $tempdir/docs && touch *.xml && make clean && make"; + +if ($? != 0) { + die "Documentation build failed. Please check before continuing"; +} + +my $copydir_target = ""; +my $skip_dir = 0; + +# step 3: Copy/Move files +foreach my $file (keys %files) { + if ($file =~ /^@.*/) { + my $from_file = substr($file, 1); + copy_dir($from_file); + } elsif ($file =~ /^!.*/) { + # special dir + my $from_file = substr($file, 1); + $skip_dir = length ($from_file); + $copydir_target = $files{$file}; + copy_dir($from_file); + $copydir_target = ""; # reset dir target + } else { + copy_file($file, $files{$file}); + } +} + +# step 4: cleanup temp dir +rmtree ("$tempdir"); + + +# step 5: create CONTENTS file + +my @file_list = (); +create_file_list (); +open OUT, ">$distdir/CONTENTS" or die "Cannot create contents file ($!)"; +print OUT + "This file contains a list of all files included in this distribution.\n"; +print OUT + "Please read the file LICENSE!\n"; + +foreach my $line (@file_list) { + print OUT $line, "\n"; +} +close OUT; + +# step 6: Tar and compression +if (defined $createtar) { + createTar(); + + if ($compressbzip2) { + my $mod = "IO::Compress::Bzip2"; + unless (eval "require $mod") { + die "Bzip2 compression is required from here\n"; + } + use IO::Compress::Bzip2 qw (bzip2 $Bzip2Error); + bzip2 $createtar => $createtar . ".bz2" + or die "bzip2 failed: $Bzip2Error\n"; + unlink $createtar; # remove tar file + } elsif ($compressgzip) { + my $mod = "IO::Compress::Gzip"; + unless (eval "require $mod") { + die "Gzip compression is required from here\n"; + } + use IO::Compress::Gzip qw (gzip $GzipError); + gzip $createtar => $createtar . ".bz2" + or die "gzip failed: $GzipError\n"; + unlink $createtar; # remove tar file + } + # in case of tar output, remove the distribution directory. + rmtree "$distdir"; +} + + +exit 0; + +sub createTar() { + my $tar = Archive::Tar->new; + + $tar->add_files(@file_list); + + $tar->write($createtar) or die "Cannot create tar file ($!)"; +} + +sub file_list_item() { + my $file = $File::Find::name; + + if (-f "$file") { + push @file_list, $file; + } +} + +sub create_file_list() { + find ({wanted => \&file_list_item, no_chdir => 1 }, $distdir); +} + +sub callback_doc_file() { + my $name = $File::Find::name; + return if ($name =~ /\.svn/); + my $stat = lstat($name); + if (-l $name) { + my $link = readlink ($name); + symlink ($link, "$tempdir/$name"); + } elsif (-d $name) { + mkdir "$tempdir/$name"; + } else { + copy ($name, "$tempdir/$name"); + } +} + + +sub copy_doc_dir () { + find({wanted => \&callback_doc_file, no_chdir => 1 }, "docs"); +} + + +sub callback_single_file() { + my $name = $File::Find::name; + return if ($name =~ /\.svn/); + my $to = $name; + + if ($copydir_target ne "") { + $to = $copydir_target . substr ($name, $skip_dir); + } + + if (-d $name) { + mkpath "$distdir/$to" or die "Cannot create $distdir/$to ($!)"; + } else { + copy_file($name, $to); + } +} + +sub copy_dir($) { + my $path = shift; + find({wanted => \&callback_single_file, no_chdir => 1 }, $path); +} + +sub copy_file($$) { + my ($from, $to) = @_; + $to = "$distdir/$to"; + print "Copy $from -> $to\n"; + my $dir = dirname($to); + if (! -e "$dir") { + mkpath ($dir) or die "Cannot create $dir ($!)"; + } + copy ($from, $to) or die "Copy failed ($!)"; +} + sub replaceParams() { $distdir =~ s/\%V/\%v-r\%r-\%T\%m/g; - $distdir =~ s/\%v/1.0/g; + my $version = $version::AmavisVersion; + $distdir =~ s/\%v/$version/g; $distdir =~ s/\%r/$revision/g; - $distdir =~ s/\%d/YYYY-MM-DD/g; - $distdir =~ s/\%t/YYYYMMDDhhmmss/g; + my $datestamp=time2str("%Y-%m-%d", time()); + my $timestamp=time2str("%Y%m%d%I%M%S", time()); + $distdir =~ s/\%d/$datestamp/g; + $distdir =~ s/\%t/$timestamp/g; $distdir =~ s/\%T/$branch/g; $distdir =~ s/\%m/$modified/g; $distdir =~ s/\%p/AmavisAdmin/g; @@ -143,8 +360,9 @@ =item B<%v> -This token will be replaced by the version (taken from F<conf/version.data>). -The version will be in the form C<major.minor>, e.g. B<1.0>. +This token will be replaced by the version (taken from +F<tools/version.pm>). The version will be in the form +C<major.minor>, e.g. B<1.0>. =item B<%V> @@ -242,6 +460,7 @@ +-README +-NOTES +-TODO + +-CONTENTS (list of files in directory) +-AmavisAdmin.war +-db (contents of the db sub directory) +-docs @@ -249,6 +468,31 @@ +html(generated HTML documentation) +txt (generated TXT documentation) +=head2 File copying + +Files are copied according to the hash %files. This hash maps a source file +related to the project base directory to the target folder. To copy files created during the process, use the C<$tempdir> variable for reference. For example, the mapping + + "$tempdir/AmavisAdmin.war" => "AmavisAdmin.war" + +copies the generated war file from it's temporary location to the target +location. + +=head3 Special copy commands + +There's the option to copy complete trees out of the source tree to the target tree. This can be done by prefixing the source tree key by an B<@> sign. The following line copies the complete C<db> folder: + + "\@db" => "db" + +The mapping result is not used in this case. If you want to copy a directory +from another location (e.g. the C<$tempdir>) path, you should use the special +indicator B<!>. The following example copies all files from the location +B<$tempdir/docs/installationguide/> to the location +B<docs/html/installationguide/>. + + "\!$tempdir/docs/installationguide/" => 'docs/html/installationguide/' + + =head1 AUTHOR Stephen Reindl <sr...@sr...> Modified: amavisadmin/trunk/tools/reposInfo.pl =================================================================== --- amavisadmin/trunk/tools/reposInfo.pl 2007-01-24 22:06:31 UTC (rev 49) +++ amavisadmin/trunk/tools/reposInfo.pl 2007-01-25 20:25:43 UTC (rev 50) @@ -13,12 +13,18 @@ # this is an development version. use strict; +BEGIN { + push @INC, "../tools"; # for ant + push @INC, "tools"; # for root dir +} + use SVN::Client; use SVK::Command::Info; use SVK; use SVK::XD; use Cwd; +use version; my $op = shift; @@ -40,13 +46,10 @@ my $cwd = getcwd(); $ctx->info( $cwd, undef, undef, \&funcRev, 0 ); $ctx->status( $cwd, undef, $funcStatus, 1, 0, 0, 0); +print "version=", $version::AmavisVersion, "\n"; +print "dbversion=", $version::DatabaseVersion, "\n"; print "revision=", $_info->rev, "\n"; print "clean_build=", $statusChanged ? "false" : "true", "\n"; -if ($cwd =~ /\/home\//) { - print "build_type=private\n"; -} else { - print "build_type=batch\n"; -} my $url = $_info->URL; if ($url =~ /trunk/) { Added: amavisadmin/trunk/tools/version.pm =================================================================== --- amavisadmin/trunk/tools/version.pm (rev 0) +++ amavisadmin/trunk/tools/version.pm 2007-01-25 20:25:43 UTC (rev 50) @@ -0,0 +1,37 @@ +# This file has only one purpose: In contains the version string used to build +# conficuration files and other topics where the version number is important. + +package version; + +use strict; +use warnings; + +BEGIN { + use Exporter(); + + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + # Version of this module (not related to the AmavisAdmin version) + $VERSION = 1.00; + + @ISA=qw(Exporter); + + @EXPORT=(); + %EXPORT_TAGS=(); + @EXPORT_OK= qw ($AmavisVersion $DatabaseVersion); +} + +our @EXPORT_OK; + +our $AmavisVersion; +our $DatabaseVersion; + +# Here the version is set +#>>>>>>>>>>>>>>>>>>>>>>>> +$AmavisVersion = "1.0"; +$DatabaseVersion = "1"; +#<<<<<<<<<<<<<<<<<<<<<<<< + +END { } + +1; Modified: amavisadmin/trunk/webapp/build.xml =================================================================== --- amavisadmin/trunk/webapp/build.xml 2007-01-24 22:06:31 UTC (rev 49) +++ amavisadmin/trunk/webapp/build.xml 2007-01-25 20:25:43 UTC (rev 50) @@ -84,8 +84,8 @@ <format property="build.timestamp" pattern="yyyyMMdd'T'HHmmssZ" locale="en"/> </tstamp> - <exec executable="/usr/bin/perl"> - <arg value="tools/reposInfo.pl" /> + <exec executable="/usr/bin/perl" failonerror="true"> + <arg value="../tools/reposInfo.pl" /> <redirector output="reposinfo.properties" /> </exec> <copy file="${src.dir}/amavisadmin.properties.in" Modified: amavisadmin/trunk/webapp/src/java/amavisadmin.properties.in =================================================================== --- amavisadmin/trunk/webapp/src/java/amavisadmin.properties.in 2007-01-24 22:06:31 UTC (rev 49) +++ amavisadmin/trunk/webapp/src/java/amavisadmin.properties.in 2007-01-25 20:25:43 UTC (rev 50) @@ -1,35 +1,31 @@ -##/* -## * Copyright (C) 2006,2007 Stephen Reindl. -## * -## * Licensed under the Apache License, Version 2.0 (the "License"); -## * you may not use this file except in compliance with the License. -## * You may obtain a copy of the License at -## * -## * http://www.apache.org/licenses/LICENSE-2.0 -## * -## * Unless required by applicable law or agreed to in writing, software -## * distributed under the License is distributed on an "AS IS" BASIS, -## * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## * See the License for the specific language governing permissions and -## * limitations under the License. -## */ - - -# AmavisAdmin properties file -# This file contains basic settings - -amavisadmin.major = 0 -amavisadmin.minor = 1 - -# those fields are translated automatically -amavisadmin.branch = @branch@ -amavisadmin.build = @revision@ -amavisadmin.build_type = @build_type@ -amavisadmin.clean_build = @clean_build@ - -# If you ever change the datamodel, please increase this value -# and provide an upgrade script in the db topic -amavisadmin.db_version = 1 - -# Build time -amavisadmin.buildtime = @TSTAMP@ +##/* +## * Copyright (C) 2006,2007 Stephen Reindl. +## * +## * Licensed under the Apache License, Version 2.0 (the "License"); +## * you may not use this file except in compliance with the License. +## * You may obtain a copy of the License at +## * +## * http://www.apache.org/licenses/LICENSE-2.0 +## * +## * Unless required by applicable law or agreed to in writing, software +## * distributed under the License is distributed on an "AS IS" BASIS, +## * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## * See the License for the specific language governing permissions and +## * limitations under the License. +## */ + + +# AmavisAdmin properties file +# This file contains basic settings + +amavisadmin.version = @version@ + +# those fields are translated automatically +amavisadmin.branch = @branch@ +amavisadmin.build = @revision@ +amavisadmin.clean_build = @clean_build@ + +amavisadmin.db_version = @dbversion@ + +# Build time +amavisadmin.buildtime = @TSTAMP@ Modified: amavisadmin/trunk/webapp/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java =================================================================== --- amavisadmin/trunk/webapp/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java 2007-01-24 22:06:31 UTC (rev 49) +++ amavisadmin/trunk/webapp/src/java/de/sreindl/amavisadmin/bo/VersionInfo.java 2007-01-25 20:25:43 UTC (rev 50) @@ -85,14 +85,8 @@ if (_localVersion == null) { initProps(); StringBuffer str = new StringBuffer(20); - str.append(props.getProperty("amavisadmin.major", "Unknown")); - str.append('.'); - str.append(props.getProperty("amavisadmin.minor", "unknown")); + str.append(props.getProperty("amavisadmin.version", "Unknown")); - String buildType = props.getProperty("amavisadmin.build_type"); - if (buildType.equals("local")) { - str.append (" local"); - } str.append (" build "); str.append (props.getProperty("amavisadmin.build")); str.append (" ("); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <str...@us...> - 2007-01-27 12:17:30
|
Revision: 54 http://amavisadmin.svn.sourceforge.net/amavisadmin/?rev=54&view=rev Author: streindl Date: 2007-01-27 04:17:28 -0800 (Sat, 27 Jan 2007) Log Message: ----------- Merged documentation and perform some ignore cleanups Modified Paths: -------------- amavisadmin/trunk/docs/Makefile amavisadmin/trunk/docs/installationguide.xml Property Changed: ---------------- amavisadmin/trunk/ amavisadmin/trunk/docs/ Property changes on: amavisadmin/trunk ___________________________________________________________________ Name: svn:ignore - dist build SESSIONS.ser + AmavisAdmin* dist build SESSIONS.ser Property changes on: amavisadmin/trunk/docs ___________________________________________________________________ Name: svn:ignore - installationguide installationguide.txt installationguide.fo installationguide.manifest* installationguide.html installationguide.pdf + installationguide installationguide.txt installationguide.fo installationguide.manifest* installationguide.html installationguide.pdf user_guide user_guide.txt user_guide.fo user_guide.manifest* user_guide.html user_guide.pdf Modified: amavisadmin/trunk/docs/Makefile =================================================================== --- amavisadmin/trunk/docs/Makefile 2007-01-27 12:02:15 UTC (rev 53) +++ amavisadmin/trunk/docs/Makefile 2007-01-27 12:17:28 UTC (rev 54) @@ -197,15 +197,15 @@ # ** stylesheet for testing whether a file has a refentry # ----------------------------------------------------------------- REFENTRY_CHECK := <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \ - version="1.0" \ - xmlns:db="http://docbook.org/ns/docbook" \ - > \ - <xsl:output method="text"/> \ - <xsl:template match="/"> \ - <xsl:if test="//refentry|//db:refentry"> \ - <xsl:text>true</xsl:text> \ - </xsl:if> \ - </xsl:template> \ + version="1.0" \ + xmlns:db="http://docbook.org/ns/docbook" \ + > \ +<xsl:output method="text"/> \ +<xsl:template match="/"> \ +<xsl:if test="//refentry|//db:refentry"> \ +<xsl:text>true</xsl:text> \ +</xsl:if> \ +</xsl:template> \ </xsl:stylesheet> # ----------------------------------------------------------------- @@ -214,44 +214,48 @@ # # for DBLaTeX DBX_CUSTOM := <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \ - version="1.0"> \ - <xsl:param name="co.linkends.show">0</xsl:param> \ - <xsl:param name="callout.markup.circled">1</xsl:param> \ - <xsl:param name="callout.linkends.hot">0</xsl:param> \ - <xsl:param name="doc.publisher.show">1</xsl:param> \ - <xsl:param name="term.breakline">1</xsl:param> \ - <xsl:param name="doc.alignment">left</xsl:param> \ - <xsl:param name="newtbl.use">1</xsl:param> \ - <xsl:param name="latex.hyperparam"/> \ - <xsl:param name="latex.style">docbook</xsl:param> \ - <xsl:param name="latex.biblio.output">all</xsl:param> \ - <xsl:param name="latex.bibfiles">""</xsl:param> \ - <xsl:param name="latex.bibwidelabel">WIDELABEL</xsl:param> \ - <xsl:param name="latex.output.revhistory">0</xsl:param> \ - <xsl:param name="latex.figure.position">[htbp]</xsl:param> \ - <xsl:param name="latex.figure.boxed">0</xsl:param> \ - <xsl:param name="latex.babel.use">1</xsl:param> \ - <xsl:param name="latex.babel.language"></xsl:param> \ - <xsl:param name="latex.class.options">twoside</xsl:param> \ - <xsl:param name="biblioentry.item.separator">, </xsl:param> \ - <xsl:param name="refentry.xref.manvolnum">1</xsl:param> \ - <xsl:param name="refsynopsis.title">Synopsis</xsl:param> \ - <xsl:param name="refnamediv.title"></xsl:param> \ - <xsl:param name="funcsynopsis.style">ansi</xsl:param> \ - <xsl:param name="funcsynopsis.decoration">1</xsl:param> \ - <xsl:param name="function.parens">0</xsl:param> \ - <xsl:param name="classsynopsis.default.language">java</xsl:param> \ - <xsl:param name="show.comments">0</xsl:param> \ + version="1.0"> \ +<xsl:param name="co.linkends.show">0</xsl:param> \ +<xsl:param name="callout.markup.circled">1</xsl:param> \ +<xsl:param name="callout.linkends.hot">0</xsl:param> \ +<xsl:param name="doc.publisher.show">1</xsl:param> \ +<xsl:param name="term.breakline">1</xsl:param> \ +<xsl:param name="doc.alignment">left</xsl:param> \ +<xsl:param name="newtbl.use">1</xsl:param> \ +<xsl:param name="latex.hyperparam"/> \ +<xsl:param name="latex.style">docbook</xsl:param> \ +<xsl:param name="latex.biblio.output">all</xsl:param> \ +<xsl:param name="latex.bibfiles">""</xsl:param> \ +<xsl:param name="latex.bibwidelabel">WIDELABEL</xsl:param> \ +<xsl:param name="latex.output.revhistory">0</xsl:param> \ +<xsl:param name="latex.figure.position">[htbp]</xsl:param> \ +<xsl:param name="latex.figure.boxed">0</xsl:param> \ +<xsl:param name="latex.babel.use">1</xsl:param> \ +<xsl:param name="latex.babel.language"></xsl:param> \ +<xsl:param name="latex.class.options">twoside</xsl:param> \ +<xsl:param name="biblioentry.item.separator">, </xsl:param> \ +<xsl:param name="refentry.xref.manvolnum">1</xsl:param> \ +<xsl:param name="refsynopsis.title">Synopsis</xsl:param> \ +<xsl:param name="refnamediv.title"></xsl:param> \ +<xsl:param name="funcsynopsis.style">ansi</xsl:param> \ +<xsl:param name="funcsynopsis.decoration">1</xsl:param> \ +<xsl:param name="function.parens">0</xsl:param> \ +<xsl:param name="classsynopsis.default.language">java</xsl:param> \ +<xsl:param name="show.comments">0</xsl:param> \ </xsl:stylesheet> # for FO output FO_CUSTOM := <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" \ - xmlns:fo="http://www.w3.org/1999/XSL/Format" \ - version="1.0"> \ - <xsl:import href="$(DOCBOOK_XSL)/fo/docbook.xsl"/> \ - <xsl:include href="cust/titlepage.templates.xsl"/> \ - <xsl:param name="$(PDF_MAKER).extensions">1</xsl:param> \ - <xsl:param name="paper.type">A4</xsl:param> \ + xmlns:fo="http://www.w3.org/1999/XSL/Format" \ + version="1.0"> \ +<xsl:import href="$(DOCBOOK_XSL)/fo/docbook.xsl"/> \ +<xsl:include href="cust/titlepage.templates.xsl"/> \ +<xsl:param name="$(PDF_MAKER).extensions">1</xsl:param> \ +<xsl:param name="paper.type">A4</xsl:param> \ +<xsl:param name="callout.unicode">1</xsl:param> \ +<xsl:param name="callout.graphics">0</xsl:param> \ +<xsl:param name="admon.graphics">1</xsl:param> \ +<xsl:param name="admon.graphics.extension">.svg</xsl:param> \ <xsl:param name="draft.watermark.image"></xsl:param> \ <xsl:param name="hyphenation">false</xsl:param> \ <xsl:param name="hyphenate.verbatim">0</xsl:param> \ Modified: amavisadmin/trunk/docs/installationguide.xml =================================================================== --- amavisadmin/trunk/docs/installationguide.xml 2007-01-27 12:02:15 UTC (rev 53) +++ amavisadmin/trunk/docs/installationguide.xml 2007-01-27 12:17:28 UTC (rev 54) @@ -156,7 +156,8 @@ <itemizedlist> <listitem> - <para>java-1_5_0-sun-1.5.0_update10-2.1</para> + <para><filename>java-1_5_0-sun-1.5.0_update10-2.1</filename> + or a more recent version.</para> </listitem> </itemizedlist> </listitem> @@ -164,39 +165,7 @@ </variablelist> </section> - <section id="sec-download-and-install-tomcat"> - <title>Apache Tomcat</title> - - <para>Apache Tomcat can be downloaded and installed for various - Operating Systems. For Microsoft Windows and other operating systems and - several Linux distributions there are binary packages available that - work usually out of the box.</para> - - <para>For the development and testing Apache Tomcat release 5.5.17 has - been used. The current version 5.5.20 lacks some files for mail handling - and therefore this version has not been taken into consideration as - there's from my point of view no need to install the newer version if - the old version is working fine.</para> - - <para>Version 5.5.17 of Apache Tomcat can be downloaded for example - from</para> - - <para><ulink - url="http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/">http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/</ulink></para> - - <para>You should also look for <ulink - url="http://www.apache.org/dyn/closer.cgi">mirrors</ulink> to reduce - load on the apache servers.</para> - - <para>After downloading the (usually) binary distribution you can - install tomcat. This is dependend on your operating system and vendor. - Therefore please check the manuals how to install tomcat. You might find - <ulink - url="http://tomcat.apache.org/tomcat-5.5-doc/setup.html">http://tomcat.apache.org/tomcat-5.5-doc/setup.html</ulink> - an intersting source of information about how to install tomcat.</para> - </section> - - <section> + <section id="sec-postgresql-database"> <title>PostgreSQL database</title> <para>This document does not describe how to setup the PostgreSQL @@ -215,7 +184,7 @@ Other versions might work also but no tests have been done to ensure working on different releases of PostgreSQL.</para> - <section> + <section id="sec-creating-the-database-for-storing-amavisd-data"> <title>Creating the database for storing Amavisd-new data</title> <para>It makes sense (from performance, sizing and other aspects like @@ -225,7 +194,7 @@ In addition PostgreSQL offers the possibility to move parts of the data to other filesystems/paths by using tablespaces.</para> - <section> + <section id="sec-creating-a-functional-database-user"> <title>Creating a functional database user</title> <para>It makes sense to create a functional user that is used by the @@ -266,7 +235,7 @@ </note> </section> - <section> + <section id="sec-creating-a-tablespace"> <title>Creating a tablespace</title> <para>For maintainability I would suggest to create the database @@ -322,7 +291,7 @@ <prompt>postgres=#</prompt></screen></para> </section> - <section> + <section id="sec-creating-the-database"> <title>Creating the database</title> <para>After doing the preparation steps described in the sections @@ -355,7 +324,7 @@ </section> </section> - <section> + <section id="sec-create-sql-data-model"> <title>Create SQL data model</title> <para>With the Amavisd-new distribution, a README-file is distributed @@ -387,9 +356,112 @@ finalizing this step your database should be ready to run amavisd-new.</para> </section> + + <section id="sec-download-postgres-jdbc"> + <title>Download PostgreSQL JDBC driver</title> + + <para>In addition to the standard PostgreSQL distribution you need the + JDBC driver that builds the interface between Java and PostgreSQL. The + JDBC driver is either part of the binary distribution itself or it can + be downloaded from <ulink + url="http://jdbc.postgresql.org/download.html">http://jdbc.postgresql.org/download.html</ulink>. + It is important that the version 3 JDBC driver (for JDK 1.4.x/1.5) + will be downloaded.</para> + </section> </section> - <section> + <section id="sec-download-and-install-tomcat"> + <title>Apache Tomcat</title> + + <para>Apache Tomcat can be downloaded and installed for various + Operating Systems. For Microsoft Windows and other operating systems and + several Linux distributions there are binary packages available that + work usually out of the box.</para> + + <para>For the development and testing Apache Tomcat release 5.5.17 has + been used. The current version 5.5.20 lacks some files for mail handling + and therefore this version has not been taken into consideration as + there's from my point of view no need to install the newer version if + the old version is working fine.</para> + + <para>Version 5.5.17 of Apache Tomcat can be downloaded for example from + <ulink + url="http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/">http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.17/</ulink>. + You should also look for <ulink + url="http://www.apache.org/dyn/closer.cgi">mirrors</ulink> to reduce + load on the apache servers.</para> + + <para>After downloading the (usually) binary distribution you can + install tomcat. This is dependend on your operating system and vendor. + Therefore please check the manuals how to install tomcat. You might find + <ulink + url="http://tomcat.apache.org/tomcat-5.5-doc/setup.html">http://tomcat.apache.org/tomcat-5.5-doc/setup.html</ulink> + an intersting source of information about how to install tomcat.</para> + + <section> + <title>Installing the database connection</title> + + <para>An important step after installing PostgreSQL is the creation of + the database resource that is used by AmavisAdmin to actually connect + to the database. There's a + <filename>$CATALINA_HOME/conf/context.xml</filename>, where you can + store resource definitions that are available for all applications + running on this instance of Tomcat (for other options how to define + resources, please refer to <ulink + url="http://tomcat.apache.org/tomcat-5.5-doc/config/context.html">http://tomcat.apache.org/tomcat-5.5-doc/config/context.html</ulink>). + </para> + + <para>To run AmavisAdmin, you need to define a database connection + resource named <varname>amavisDB</varname>. An example context.xml + file might look like this: </para> + + <programlisting><Context> + <!-- ... other global settings ... --> + <WatchedResource>WEB-INF/web.xml</WatchedResource> + <!-- ... other global settings ... --> + <Resource auth="container" + type="javax.sql.Datasource" + name="jdbc/amavisDB" + driverClassName="org.postgresql.Driver" + url="jdbc:postgresql://<replaceable>localhost:5432/amavis</replaceable>" + username="<replaceable>amavis</replaceable>" + password="<replaceable>amavis</replaceable>" + /> + <!-- ... other global settings ... --> +</Context></programlisting> + + <para>You have to ensure that the last three entries in the list (url, + username and password) are matching the settings that you have defined + while installing the database (see <xref + linkend="sec-postgresql-database" />).</para> + + <para>On top of this you have to copy the postgres JDBC driver to the + directory <filename + class="directory">$CATALINA_HOME/common/lib</filename>.</para> + </section> + + <section id="sec-starting-tomcat"> + <title>Starting Tomcat</title> + + <para>After finishing the steps above you should start Tomcat now to + see that everything is running smooth. By running</para> + + <screen><prompt>sreindl@linux-fest:~> </prompt><userinput>$CATALINA_HOME/bin/startup.sh</userinput> +<computeroutput>Using CATALINA_BASE: /opt/apache-tomcat-5.5.17 +Using CATALINA_HOME: /opt/apache-tomcat-5.5.17 +Using CATALINA_TMPDIR: /opt/apache-tomcat-5.5.17/temp +Using JRE_HOME: /usr/lib64/jvm/java/jre +</computeroutput><prompt>sreindl@linux-fest:~> </prompt></screen> + + <para>You should have a look now in the <filename + class="directory">$CATALINA_HOME/log</filename> directory and scan the + log files appearing there for errors (esp. the files + <filename>catalina*</filename> and + <filename>localhost*</filename>).</para> + </section> + </section> + + <section id="sec-download-and-install-amavisd-new"> <title>Amavisd-new</title> <para>The Amavisd-new application can be downloaded from the <ulink @@ -438,7 +510,7 @@ another application.</para> </callout> - <callout arearefs="pl-amavis-inet-socket-port"> + <callout arearefs="pl-amavis-conf-protocol"> <para>This line defines the general protocol to be used for talking to amavisd-new. As described above, the PDP-protocol is the right value here.</para> @@ -492,7 +564,7 @@ <listitem> <para>If this variable is set to sql, virus mail texts are stored - in the database. </para> + in the database.</para> </listitem> </varlistentry> @@ -523,11 +595,112 @@ accessable to the users.</para> </section> - <section> + <section id="sec-install-amavis-admin"> <title>AmavisAdmin</title> - <para>To install AmavisAdmin, you can download the distribtion file from - <?target aSAsAS?></para> + <para>To install AmavisAdmin, you can download the distribution file + from the AmavisAdmin project at sourceforge.net: <ulink + url="http://sourceforge.net/project/showfiles.php?group_id=187080">http://sourceforge.net/project/showfiles.php?group_id=187080</ulink>. + There you have the different versions available. As this version is + based on AmavisAdmin version @version@, please select the appropriate + section and download the file <filename>@distfile@</filename>.</para> + + <section id="sec-install-amavisadmin-on-unix"> + <title>Installation of AmavisAdmin on a Unix/Linux operating + system</title> + + <para>After downloading the distribution, the files have to be + untarred. Depending on the format you have to use + <command>gunzip</command> (for files with the extension + <filename>.gz</filename>) or <command>bunzip2</command> (files with + the extension <filename>.bz2</filename>) to uncompress the files + first:</para> + + <screen><prompt>sreindl@linux-fest:~> </prompt><userinput>gunzip @distname@.tar.gz +</userinput><prompt>sreindl@linux-fest:~> </prompt></screen> + + <para>for gzip compressed files or</para> + + <screen><prompt>sreindl@linux-fest:~> </prompt><userinput>bunzip2 @distname@.tar.bz2 +</userinput><prompt>sreindl@linux-fest:~> </prompt></screen> + + <para>After uncompressing there should be a file named + <filename>@tarfile@.tar</filename>. This file can now be extracted + with the <command>tar</command> command:</para> + + <screen><prompt>sreindl@linux-fest:~> </prompt><userinput>cd /tmp +</userinput><prompt>sreindl@linux-fest:/tmp> </prompt><userinput>tar xfv @distname@.tar +</userinput><computeroutput>... </computeroutput><lineannotation>Several lines of output</lineannotation> +<prompt>sreindl@linux-fest:/tmp> </prompt><userinput>cd @distname@ +</userinput><prompt>sreindl@linux-fest:/tmp/@distname@></prompt></screen> + + <para>The following sections let you first update your database + system, deploy your web application and configure the AmavisAdmin + software.</para> + </section> + + <section id="sec-perform-database-update"> + <title>Updating the database for AmavisAdmin</title> + + <para>For several purposes the database model used by Amavisd-new has + to be enhanced by several items, this process can be done by running a + script on the database that performs the steps:</para> + + <screen><prompt>sreindl@linux-fest:/tmp/@distname@> </prompt><userinput>psql --username=amavis amavis <db/postgres/update_v0_v1.sql +</userinput><computeroutput>... </computeroutput><lineannotation>Several lines of output / Only warnings should appear</lineannotation> +<prompt>sreindl@linux-fest:/tmp/@distname@> </prompt></screen> + + <para>After running this script, several tables have been updated + (i.e. new columns have been added) and several new tables have been + created. In addition some entries have been inserted into the new + table to enable AmavisAdmin to recognize that the database has been + changed and in addition some jobs have been inserted to perform + further migration of existing database entries.</para> + </section> + + <section id="sec-deploy-AmavisAdmin"> + <title>Deploy the AmavisAdmin application</title> + + <para>The deployment of the AmavisAdmin application is quite simple. + For deploying the application to Tomcat you just need to copy the war + file to the folder <filename + class="directory">$CATALINA_HOME/webapps/</filename>. Tomcat is + unpacking and initializing the application by itself. That's + it.</para> + </section> + + <section id="sec-AmavisAdmin-initial-configuration"> + <title>Configuration of AmavisAdmin</title> + + <para>After deploying the application you need to set several + configuration parameters before the actual application can be + executed. The configuration can be started by pointing your web + browser to the starting page of your AmavisAdmin installation (e.g. + <ulink + url="http://localhost:8080/AmavisAdmin">http://localhost:8080/AmavisAdmin</ulink>). + About what can be configured and the configuration fields itself you + can find an explanation in the AmavisAdmin user guide. You should also + enable the maintenance jobs that are running inside the application + server. This can be done by selecting the menu item + <guimenuitem>Jobs</guimenuitem> after logging in the first time as an + administrator.</para> + + <para>After performing the configuration you are ready to use + AmavisAdmin. For more details abount administration and use of + AmavisAdmin please refer to the user guide.</para> + </section> </section> </section> + + <section id="sec-building-amavsiadmin-from-scratch"> + <title>Building AmavisAdmin from scratch</title> + + <warning> + <para>Please be aware that the development has been done on a single + machine only. There might be hard dependencies due to the fact that it + has been never tested to build this stuff on another machine.</para> + </warning> + + <remark>To be filled</remark> + </section> </article> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |