You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2013/09/12 03:21:28 UTC

svn commit: r1522099 [3/4] - in /openmeetings/trunk/singlewebapp: ./ docs/ src/main/java/org/apache/openmeetings/axis/services/ src/main/java/org/apache/openmeetings/backup/ src/main/java/org/apache/openmeetings/data/calendar/beans/ src/main/java/org/a...

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java Thu Sep 12 01:21:26 2013
@@ -18,27 +18,25 @@
  */
 package org.apache.openmeetings.data.conference;
 
+import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.user.rooms.RoomEnterBehavior.getRoomUrlFragment;
+
+import java.security.NoSuchAlgorithmException;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.TimeZone;
 import java.util.Vector;
 
-import org.apache.openmeetings.OpenmeetingsVariables;
-import org.apache.openmeetings.data.basic.AuthLevelUtil;
 import org.apache.openmeetings.data.basic.FieldManager;
-import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
-import org.apache.openmeetings.data.calendar.daos.AppointmentDao;
-import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
 import org.apache.openmeetings.data.conference.dao.InvitationDao;
-import org.apache.openmeetings.data.conference.dao.RoomDao;
-import org.apache.openmeetings.data.user.UserManager;
-import org.apache.openmeetings.data.user.dao.UserDao;
 import org.apache.openmeetings.persistence.beans.basic.MailMessage;
 import org.apache.openmeetings.persistence.beans.calendar.Appointment;
 import org.apache.openmeetings.persistence.beans.calendar.MeetingMember;
-import org.apache.openmeetings.persistence.beans.invitation.Invitations;
+import org.apache.openmeetings.persistence.beans.invitation.Invitation;
+import org.apache.openmeetings.persistence.beans.invitation.Invitation.Valid;
 import org.apache.openmeetings.persistence.beans.lang.Fieldlanguagesvalues;
+import org.apache.openmeetings.persistence.beans.room.Room;
 import org.apache.openmeetings.persistence.beans.user.User;
 import org.apache.openmeetings.persistence.beans.user.User.Type;
 import org.apache.openmeetings.utils.TimezoneUtil;
@@ -61,36 +59,25 @@ import org.springframework.transaction.a
  */
 @Transactional
 public class InvitationManager {
-
-	private static final Logger log = Red5LoggerFactory.getLogger(
-			InvitationManager.class, OpenmeetingsVariables.webAppRootKey);
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationManager.class, webAppRootKey);
+	public enum MessageType {
+		Create
+		, Update
+		, Cancel
+	}
 
 	@Autowired
 	private InvitationDao invitationDao;
 	@Autowired
-	private AppointmentLogic appointmentLogic;
-	@Autowired
-	private ConfigurationDao configurationDao;
-	@Autowired
-	private UserManager userManager;
-	@Autowired
 	private FieldManager fieldManager;
 	@Autowired
 	private ManageCryptStyle manageCryptStyle;
 	@Autowired
-	private RoomDao roomDao;
-	@Autowired
-	private UserDao usersDao;
-	@Autowired
 	private MailHandler mailHandler;
 	@Autowired
 	private SMSHandler smsHandler;
 	@Autowired
-	private AuthLevelUtil authLevelUtil;
-	@Autowired
 	private TimezoneUtil timezoneUtil;
-	@Autowired
-	private AppointmentDao appointmentDaoImpl;
 
 	/**
 	 * Sending invitation within plain mail
@@ -112,285 +99,176 @@ public class InvitationManager {
 	 * @return
 	 */
 	// ---------------------------------------------------------------------------------------------------------
-	public Invitations addInvitationLink(Long user_level, String username,
-			String message, String baseurl, String email, String subject,
-			Long rooms_id, String conferencedomain,
-			Boolean isPasswordProtected, String invitationpass, Integer valid,
-			Date validFrom, Date validTo, Long createdBy, String baseUrl,
-			Long language_id, Boolean sendMail, Date gmtTimeStart,
-			Date gmtTimeEnd, Long appointmentId, String fromUserField, TimeZone timeZone) {
-		try {
-			if (authLevelUtil.checkUserLevel(user_level)) {
-
-				Invitations invitation = new Invitations();
-				invitation.setIsPasswordProtected(isPasswordProtected);
-				if (isPasswordProtected) {
-					invitation.setInvitationpass(manageCryptStyle
-							.getInstanceOfCrypt().createPassPhrase(
-									invitationpass));
-				}
-
-				invitation.setInvitationWasUsed(false);
-				log.debug(baseUrl);
-				invitation.setBaseUrl(baseUrl);
-				invitation.setTimeZoneId(timeZone.getID());
-
-				// valid period of Invitation
-				if (valid == 1) {
-					// endless
-					invitation.setIsValidByTime(false);
-					invitation.setCanBeUsedOnlyOneTime(false);
-				} else if (valid == 2) {
-					// period
-					invitation.setIsValidByTime(true);
-					invitation.setCanBeUsedOnlyOneTime(false);
-
-					Date gmtTimeStartShifted = new Date(gmtTimeStart.getTime()
-							- (5 * 60 * 1000));
-
-					invitation.setValidFrom(gmtTimeStartShifted);
-					invitation.setValidTo(gmtTimeEnd);
-
-					// invitation.setValidFrom(validFrom);
-					// invitation.setValidTo(validTo);
-				} else {
-					// one-time
-					invitation.setIsValidByTime(false);
-					invitation.setCanBeUsedOnlyOneTime(true);
-					invitation.setInvitationWasUsed(false);
-				}
-
-				invitation.setDeleted(false);
-
-				User us = usersDao.get(createdBy);
-				String hashRaw = "HASH" + (System.currentTimeMillis());
+	public Invitation getInvitation(User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, String baseUrl, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment)
+	{
+		Invitation i = getInvitation(null, inveetee, room, isPasswordProtected, invitationpass, valid, createdBy
+				, baseUrl, language_id, gmtTimeStart, gmtTimeEnd, appointment);
+		i = invitationDao.update(i);
+		return i;
+	}
+	
+	public Invitation getInvitation(Invitation _invitation, User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, String baseUrl, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment) {
+		
+		Invitation invitation = _invitation;
+		if (null == _invitation) {
+			invitation = new Invitation();
+			String hashRaw = "HASH" + (System.currentTimeMillis());
+			try {
 				invitation.setHash(MD5.do_checksum(hashRaw));
-
-				invitation.setInvitedBy(us);
-				invitation.setInvitedname(username);
-				invitation.setInvitedEMail(email);
-				invitation.setRoom(roomDao.get(rooms_id));
-				invitation.setConferencedomain(conferencedomain);
-				invitation.setStarttime(new Date());
-				invitation.setAppointmentId(appointmentId);
-
-				invitation = invitationDao.updateInvitation(invitation);
-				long invitationId = invitation.getInvitations_id();
-
-				invitation.setInvitations_id(invitationId);
-
-				if (invitationId > 0) {
-
-					if (sendMail) {
-						this.sendInvitionLink(us.getAdresses().getEmail(), 
-								username, message, baseurl,
-								email, subject, invitation.getHash(),
-								validFrom, validTo, language_id, fromUserField);
-					}
-
-					return invitation;
-				}
-
+			} catch (NoSuchAlgorithmException e) {
+				log.error("Unexpected error while creating invitation", e);
+				throw new RuntimeException(e);
 			}
-		} catch (Exception err) {
-			log.error("addInvitationLink", err);
 		}
-		return null;
-	}
 
+		invitation.setPasswordProtected(isPasswordProtected);
+		if (isPasswordProtected) {
+			invitation.setPassword(manageCryptStyle
+					.getInstanceOfCrypt().createPassPhrase(
+							invitationpass));
+		}
 
-	/**
-	 * @author vasya
-	 * 
-	 * @param meetingMember
-	 * @param appointment
-	 * @param message
-	 * @param baseurl
-	 * @param subject
-	 * @param conferencedomain
-	 * @param valid
-	 * @param createdBy
-	 * @return
-	 */
-	// ---------------------------------------------------------------------------------------------------------
-	public Invitations addInvitationLink(MeetingMember meetingMember,
-			Appointment appointment,
-			String message, String baseUrl, String subject,
-			String conferencedomain,
-			Integer valid,
-			User createdBy) {
-		try {
-			Invitations invitation = new Invitations();
-			invitation.setIsPasswordProtected(appointment.isPasswordProtected());
-			if (appointment.isPasswordProtected()) {
-				invitation.setInvitationpass(manageCryptStyle
-						.getInstanceOfCrypt().createPassPhrase(
-								appointment.getPassword()));
-			}
-
-			invitation.setInvitationWasUsed(false);
-			log.debug(baseUrl);
+		invitation.setUsed(false);
+		log.debug(baseUrl);
+		if (baseUrl != null) {
 			invitation.setBaseUrl(baseUrl);
-			invitation.setTimeZoneId(timezoneUtil.getTimezoneByUser(createdBy).getID());
-
-			// valid period of Invitation
-			if (valid == 1) {
-				// endless
-				invitation.setIsValidByTime(false);
-				invitation.setCanBeUsedOnlyOneTime(false);
-			} else if (valid == 2) {
-				// period
-				invitation.setIsValidByTime(true);
-				invitation.setCanBeUsedOnlyOneTime(false);
-
-				Date gmtTimeStartShifted = new Date(appointment.getStart().getTime()
-						- (5 * 60 * 1000));
-
-				invitation.setValidFrom(gmtTimeStartShifted);
-				invitation.setValidTo(appointment.end());
-
-			} else {
-				// one-time
-				invitation.setIsValidByTime(false);
-				invitation.setCanBeUsedOnlyOneTime(true);
-				invitation.setInvitationWasUsed(false);
-			}
-
-			invitation.setDeleted(false);
-
-			String hashRaw = "HASH" + (System.currentTimeMillis());
-			invitation.setHash(MD5.do_checksum(hashRaw));
-
-			invitation.setInvitedBy(createdBy);
-			String userName = meetingMember.getUser().getFirstname() + " " + meetingMember.getUser().getLastname();
-			invitation.setInvitedname(userName);
-			invitation.setInvitedEMail(meetingMember.getUser().getAdresses().getEmail());
-			invitation.setRoom(appointment.getRoom());
-			invitation.setConferencedomain(conferencedomain);
-			invitation.setStarttime(new Date());
-			invitation.setAppointmentId(appointment.getId());
-
-			invitation = invitationDao.updateInvitation(invitation);
-			long invitationId = invitation.getInvitations_id();
-
-			invitation.setInvitations_id(invitationId);
-
-			if (invitationId > 0) {
-
-				this.sendInvitionLink(createdBy,
-						meetingMember,
-						appointment,
-						message,
-						baseUrl,
-						subject,
-						invitation.getHash());
-
-				return invitation;
-			}
-		} catch (Exception err) {
-			log.error("addInvitationLink", err);
 		}
-		return null;
+		invitation.setValid(valid);
+		
+		// valid period of Invitation
+		switch (valid) {
+			case Period:
+				invitation.setValidFrom(new Date(gmtTimeStart.getTime() - (5 * 60 * 1000)));
+				invitation.setValidTo(gmtTimeEnd);
+				break;
+			case Endless:
+			case OneTime:
+			default:
+				break;
+		}
+
+		invitation.setDeleted(false);
+
+		invitation.setInvitedBy(createdBy);
+		invitation.setInvitee(inveetee);
+		if (language_id != null && Type.contact == invitation.getInvitee().getType()) {
+			invitation.getInvitee().setLanguage_id(language_id);
+		}
+		invitation.setRoom(room);
+		invitation.setInserted(new Date());
+		invitation.setAppointment(appointment);
+
+		return invitation;
 	}
 	
-	// ----------------------------------------------------------------------------------------------------------------
-
 	/**
-	 * @author becherer
-	 * @param ment
+	 * @author vasya
+	 * 
 	 * @param member
+	 * @param a
 	 */
-	// -----------------------------------------------------------------------------------------------
-	public void cancelInvitation(Appointment appointment, MeetingMember member,
-			Long canceling_user_id, Long language_id) throws Exception {
-
-		log.debug("cancelInvitation");
-
-		User user;
-
-		try {
-			user = userManager.getUserById(canceling_user_id);
-		} catch (Exception e) {
-			log.error("cancelInvitation Cancelling user cant be retrieved");
+	public void processInvitation(Appointment a, MeetingMember member, MessageType type, String baseUrl) {
+		processInvitation(a, member, type, baseUrl, true);
+	}
+	
+	public void processInvitation(Appointment a, MeetingMember mm, MessageType type, String baseUrl, boolean sendMail) {
+		if (a.getRemind() == null) {
+			log.error("Appointment doesn't have reminder set!");
 			return;
 		}
-
-		if (appointment.getRemind() == null) {
-			log.error("Appointment " + appointment.getTitle()
-					+ " has no ReminderType!");
+		long remindType = a.getRemind().getTypId();
+		if (remindType < 2) {
+			log.error("MeetingMember should not have invitation!");
 			return;
 		}
 
-		User us = member.getUser();
-		TimeZone timezone = null;
-		// external users have no user object stored so we will need to get the
-		// timezone from the stored string
-		if (us != null) {
-			timezone = timezoneUtil.getTimezoneByUser(us);
-		} else {
-			timezone = timezoneUtil.getTimeZone(member.getTimeZoneId());
-		}
+		log.debug(":::: processInvitation ..... " + remindType);
+
+		// appointment.getRemind().getTypId() == 1 will not receive emails
+		if (remindType > 1) {
+			log.debug("Invitation for Appointment : simple email");
 
-		String subject = formatCancelSubject(language_id, appointment, user,
-				timezone);
-		String message = formatCancelMessage(language_id, appointment, user,
-				timezone);
-
-		// checking reminderType
-		if (appointment.getRemind().getTypId() == 1) {
-			log.debug("no remindertype defined -> no cancel of invitation");
-		} else if (appointment.getRemind().getTypId() == 2) {
-			log.debug("ReminderType simple mail -> sending simple mail...");
-			sendInvitationCancelMail(member.getUser().getAdresses().getEmail(),
-					member.getAppointment(), user.getAdresses().getEmail(),
-					subject, message);
-		} else if (appointment.getRemind().getTypId() == 3) {
 			try {
-				sendInvitationIcalCancelMail(member.getUser().getAdresses().getEmail(),
-						member.getUser().getFirstname() + " " + member.getUser().getLastname(),
-						appointment, canceling_user_id, (appointment.getOwner().getUser_id() == member.getUser().getUser_id()),
-						appointment.getStart(),
-						appointment.end(), timezone, subject,
-						message);
+				User createdBy = a.getOwner();
+				Invitation invitation = null;
+				/* TODO check delete cascade
+				if (MessageType.Cancel == type) {
+					if (member.getInvitation() != null) {
+						member.getInvitation().setDeleted(true);
+						invitationDao.updateInvitation(member.getInvitation());
+					}
+				} else */
+				if (MessageType.Cancel != type) {
+					invitation = getInvitation(mm.getInvitation()
+							, mm.getUser(), a.getRoom(), a.isPasswordProtected(), a.getPassword()
+							, Valid.Period, createdBy, baseUrl, null, a.getStart(), a.getEnd(), a);
+				}
+				mm.setInvitation(invitation);
+				if (sendMail) {
+					sendInvitionLink(a, mm, type, remindType > 2);
+				}
 			} catch (Exception e) {
-				log.error("Error sending IcalCancelMail for User "
-						+ member.getUser().getAdresses().getEmail() + " : " + e.getMessage());
+				log.error("Unexpected error while setting invitation", e);
 			}
 		}
+	}
+
+	private String formatSubject(Long language_id, Appointment point, TimeZone timezone) {
+		String message = fieldManager.getString(1151L, language_id) + " " + point.getTitle();
 
-		// Deleting invitation, if exists
-		Invitations inv = member.getInvitation();
+		message += " "
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(point.getStart(), timezone);
 
-		if (inv != null) {
-			inv.setDeleted(true);
-			//updateInvitation(inv);
-			invitationDao.updateInvitation(inv);
+		message += " - "
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(point.getEnd(), timezone);
+
+		return message;
+	}
+
+	private String formatMessage(Long language_id, Appointment point, TimeZone timezone, String invitorName) {
+		String message = fieldManager.getString(1151L, language_id) + " " + point.getTitle();
+
+		if (point.getDescription() != null &&  point.getDescription().length() != 0) {
+			message += fieldManager.getString(1152L, language_id) + point.getDescription();
 		}
 
+		message += "<br/>"
+				+ fieldManager.getString(1153L, language_id)
+				+ ' '
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(point.getStart(), timezone)
+				+ "<br/>";
+
+		message += fieldManager.getString(1154L, language_id)
+				+ ' '
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(point.getEnd(), timezone) + "<br/>";
+
+		message += fieldManager.getString(1156L, language_id) + invitorName + "<br/>";
+
+		return message;
 	}
 
-	private String formatCancelSubject(Long language_id,
-			Appointment appointment, User user, TimeZone timezone) {
-		try {
-			String message = fieldManager.getString(1157L, language_id)
-					+ appointment.getTitle();
+	private String formatCancelSubject(Long language_id, Appointment appointment, TimeZone timezone) {
+		String message = fieldManager.getString(1157L, language_id)
+				+ appointment.getTitle();
 
-			message += " "
-					+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
-							appointment.getStart(), timezone)
-					+ " - "
-					+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
-							appointment.end(), timezone);
+		message += " "
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
+						appointment.getStart(), timezone)
+				+ " - "
+				+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
+						appointment.getEnd(), timezone);
 
-			return message;
-		} catch (Exception err) {
-			log.error("Could not format cancel message");
-			return "Error formatCancelMessage";
-		}
+		return message;
 	}
 
 	private String formatCancelMessage(Long language_id,
-			Appointment appointment, User user, TimeZone timezone) {
+			Appointment appointment, TimeZone timezone, String invitorName) {
 		try {
 			String message = fieldManager.getString(1157L, language_id)
 					+ appointment.getTitle();
@@ -420,12 +298,9 @@ public class InvitationManager {
 			message += labelid1154.getValue()
 					+ ' '
 					+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
-							appointment.end(), timezone)
+							appointment.getEnd(), timezone)
 					+ "<br/>";
 
-			String invitorName = user.getFirstname() + " " + user.getLastname()
-					+ " [" + user.getAdresses().getEmail() + "]";
-
 			Fieldlanguagesvalues labelid1156 = fieldManager
 					.getFieldByIdAndLanguage(new Long(1156), language_id);
 			message += labelid1156.getValue() + invitorName + "<br/>";
@@ -437,75 +312,7 @@ public class InvitationManager {
 		}
 	}
 
-	// -----------------------------------------------------------------------------------------------
-
-	/**
-	 * @author becherer, seba.wagner
-	 * @param ment
-	 * @param member
-	 */
-	// -----------------------------------------------------------------------------------------------
-	public void updateInvitation(Appointment appointment, MeetingMember member,
-			Long canceling_user_id, Long language_id, String invitorName, boolean sendMail) {
-
-		log.debug("updateInvitation");
-
-		User user = userManager.getUserById(canceling_user_id);
-		if (user == null) {
-			log.error("Cancelling user cant be retrieved");
-			return;
-		}
-
-		if (appointment.getRemind() == null) {
-			log.error("Appointment " + appointment.getTitle()
-					+ " has no ReminderType!");
-			return;
-		}
-
-		log.debug("Remindertype : " + appointment.getRemind().getTypId());
-
-		User us = member.getUser();
-		TimeZone timezone = null;
-		// external users have no user object stored so we will need to get the
-		// timezone from the stored string
-		if (us != null) {
-			timezone = timezoneUtil.getTimezoneByUser(us);
-		} else {
-			timezone = timezoneUtil.getTimeZone(member.getTimeZoneId());
-		}
-
-		// Get text messages
-		String subject = formatUpdateSubject(language_id, appointment, user,
-				timezone);
-
-		String message = formatUpdateMessage(language_id, appointment, user,
-				timezone, invitorName);
-
-		// checking reminderType and send emails, reminder type 1 receives
-		// nothing
-		if (sendMail) {
-		if (appointment.getRemind().getTypId() == 2) {
-			sendInvitationUpdateMail(member.getUser().getAdresses().getEmail(), appointment, user
-					.getAdresses().getEmail(), subject, message);
-		} else if (appointment.getRemind().getTypId() == 3) {
-			try {
-				sendInvitationIcalUpdateMail(member.getUser().getAdresses().getEmail(),
-						member.getUser().getFirstname() + " " + member.getUser().getLastname(),
-						appointment, canceling_user_id, (appointment.getOwner().getUser_id() == member.getUser().getUser_id()),
-						language_id, appointment.getStart(),
-						appointment.end(), timezone, subject,
-						message);
-			} catch (Exception e) {
-				log.error("Error sending IcalUpdateMail for User "
-						+ member.getUser().getAdresses().getEmail() + " : " + e.getMessage());
-			}
-		}
-		}
-
-	}
-
-	private String formatUpdateSubject(Long language_id,
-			Appointment appointment, User user, TimeZone timezone) {
+	private String formatUpdateSubject(Long language_id, Appointment appointment, TimeZone timezone) {
 		try {
 
 			String message = fieldManager.getString(1155L, language_id) + " "
@@ -525,7 +332,7 @@ public class InvitationManager {
 							appointment.getStart(), timezone)
 					+ " - "
 					+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
-							appointment.end(), timezone);
+							appointment.getEnd(), timezone);
 
 			return message;
 
@@ -536,7 +343,7 @@ public class InvitationManager {
 	}
 
 	private String formatUpdateMessage(Long language_id,
-			Appointment appointment, User user, TimeZone timezone,
+			Appointment appointment, TimeZone timezone,
 			String invitorName) {
 		try {
 
@@ -567,7 +374,7 @@ public class InvitationManager {
 			message += labelid1154.getValue()
 					+ ' '
 					+ CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(
-							appointment.end(), timezone)
+							appointment.getEnd(), timezone)
 					+ "<br/>";
 
 			Fieldlanguagesvalues labelid1156 = fieldManager
@@ -582,268 +389,93 @@ public class InvitationManager {
 		}
 	}
 
-	// -----------------------------------------------------------------------------------------------
-
-	/**
-	 * @author o.becherer
-	 * @param user_level
-	 * @param username
-	 * @param message
-	 * @param baseurl
-	 * @param email
-	 * @param subject
-	 * @param rooms_id
-	 * @param conferencedomain
-	 * @param isPasswordProtected
-	 * @param invitationpass
-	 * @param valid
-	 * @param validFrom
-	 * @param validTo
-	 * @param createdBy
-	 * @return
-	 */
-	// ---------------------------------------------------------------------------------------------------------
-	public Long addInvitationIcalLink(Long user_level, String username,
-			String message, String baseurl, String email, String subject,
-			Long rooms_id, String conferencedomain,
-			Boolean isPasswordProtected, String invitationpass, Integer valid,
-			Date validFrom, Date validTo, Long createdBy, Long appointMentId,
-			Boolean invitor, Long language_id, TimeZone timezone,
-			Long appointmentId, String fromUserField) {
-		log.debug("addInvitationIcalLink");
-
-		try {
-			if (authLevelUtil.checkUserLevel(user_level)) {
-
-				Invitations invitation = new Invitations();
-				invitation.setIsPasswordProtected(isPasswordProtected);
-				if (isPasswordProtected) {
-					invitation.setInvitationpass(manageCryptStyle
-							.getInstanceOfCrypt().createPassPhrase(
-									invitationpass));
-				}
-
-				invitation.setInvitationWasUsed(false);
-
-				// valid period of Invitation
-				if (valid == 1) {
-					// endless
-					invitation.setIsValidByTime(false);
-					invitation.setCanBeUsedOnlyOneTime(false);
-				} else if (valid == 2) {
-					// period
-					invitation.setIsValidByTime(true);
-					invitation.setCanBeUsedOnlyOneTime(false);
-					invitation.setValidFrom(validFrom);
-					invitation.setValidTo(validTo);
-				} else {
-					// one-time
-					invitation.setIsValidByTime(false);
-					invitation.setCanBeUsedOnlyOneTime(true);
-					invitation.setInvitationWasUsed(false);
-				}
-
-				invitation.setDeleted(false);
-
-				User us = usersDao.get(createdBy);
-				String hashRaw = "InvitationHash"
-						+ (System.currentTimeMillis());
-				log.debug("addInvitationIcalLink : rawHash = " + hashRaw);
-				invitation.setHash(MD5.do_checksum(hashRaw));
-
-				invitation.setInvitedBy(us);
-				invitation.setBaseUrl(baseurl);
-				invitation.setInvitedname(username);
-				invitation.setInvitedEMail(email);
-				invitation.setRoom(roomDao.get(rooms_id));
-				invitation.setConferencedomain(conferencedomain);
-				invitation.setStarttime(new Date());
-				invitation.setAppointmentId(appointmentId);
-
-				invitation = invitationDao.updateInvitation(invitation);
-				long invitationId = invitation.getInvitations_id();
-
-				if (invitationId > 0) {
-					this.sendInvitionIcalLink(username, message, baseurl,
-							email, subject, invitation.getHash(),
-							appointMentId, us, invitor, language_id,
-							validFrom, validTo, timezone, fromUserField);
-					return invitationId;
-				}
-			}
-		} catch (Exception err) {
-			log.error("addInvitationIcalLink", err);
-		}
-		return null;
-	}
-
-	// -----------------------------------------------------------------------------------------------
-
 	/**
 	 * @author vasya
-	 * @param meetingMember
-	 * @param appointment
-	 * @param message
-	 * @param baseurl
-	 * @param subject
-	 * @param conferencedomain
-	 * @param valid
-	 * @param createdBy
-	 * @return
-	 */
-	// ---------------------------------------------------------------------------------------------------------
-	public Long addInvitationIcalLink(MeetingMember meetingMember, Appointment appointment,
-			String message, String baseurl, String subject,
-			String conferencedomain, Integer valid, User createdBy) {
-		log.debug("addInvitationIcalLink");
-
-		try {
-			Invitations invitation = new Invitations();
-			invitation.setIsPasswordProtected(appointment.isPasswordProtected());
-			if (appointment.isPasswordProtected()) {
-				invitation.setInvitationpass(manageCryptStyle
-						.getInstanceOfCrypt().createPassPhrase(
-								appointment.getPassword()));
-			}
-
-			String username = meetingMember.getUser().getFirstname() + " " + meetingMember.getUser().getLastname();
-			invitation.setInvitationWasUsed(false);
-
-			// valid period of Invitation
-			if (valid == 1) {
-				// endless
-				invitation.setIsValidByTime(false);
-				invitation.setCanBeUsedOnlyOneTime(false);
-			} else if (valid == 2) {
-				// period
-				invitation.setIsValidByTime(true);
-				invitation.setCanBeUsedOnlyOneTime(false);
-				invitation.setValidFrom(appointment.getStart());
-				invitation.setValidTo(appointment.end());
-			} else {
-				// one-time
-				invitation.setIsValidByTime(false);
-				invitation.setCanBeUsedOnlyOneTime(true);
-				invitation.setInvitationWasUsed(false);
-			}
-
-			invitation.setDeleted(false);
-
-			if (meetingMember.getUser().getType() == Type.contact) {
-				String hashRaw = "InvitationHash"
-						+ (System.currentTimeMillis());
-				log.debug("addInvitationIcalLink : rawHash = " + hashRaw);
-				invitation.setHash(MD5.do_checksum(hashRaw));
-			} else {
-				invitation.setHash("");
-			}
-
-			invitation.setInvitedBy(createdBy);
-			invitation.setBaseUrl(baseurl);
-			invitation.setInvitedname(username);
-			invitation.setInvitedEMail(meetingMember.getUser().getAdresses().getEmail());
-			invitation.setRoom(appointment.getRoom());
-			invitation.setConferencedomain(conferencedomain);
-			invitation.setStarttime(new Date());
-			invitation.setAppointmentId(appointment.getId());
-
-			invitation = invitationDao.updateInvitation(invitation);
-			long invitationId = invitation.getInvitations_id();
-
-			if (invitationId > 0) {
-				this.sendInvitionIcalLink(username, message, baseurl,
-						meetingMember.getUser().getAdresses().getEmail(), subject, invitation.getHash(),
-						appointment.getId(), createdBy, (appointment.getOwner().getUser_id() == meetingMember.getUser().getUser_id())
-						, meetingMember.getUser().getLanguage_id(),
-						appointment.getStart(), appointment.end(),
-						timezoneUtil.getTimezoneByUser(createdBy), createdBy.getFirstname() + " " + createdBy.getLastname());
-				return invitationId;
-			}
-		} catch (Exception err) {
-			log.error("addInvitationIcalLink", err);
-		}
-		return null;
-	}
-	
-	// ---------------------------------------------------------------------------------------------------------
-	public String sendInvitionLink(User us, Invitations inv, String message, String baseurl, String subject, Long language_id) {
-		return sendInvitionLink(us != null ? us.getAdresses().getEmail() : inv.getInvitedEMail()
-				, inv.getInvitedname()
-				, message, baseurl, inv.getInvitedEMail(), subject, inv.getHash()
-				, inv.getValidFrom(), inv.getValidTo(), language_id, us.getFirstname() + " " + us.getLastname());
-	}
-
-	/**
-     * @param username
+	 * 
+     * @param mm
+     * @param a
      * @param message
      * @param baseurl
-     * @param email
-     * @param replyTo
      * @param subject
-     * @param invitationsHash
-     * @param dStart
-     * @param dEnd
-	 * @param language_id   If it is >0 then "&language=" is added to the link
+	 * @throws Exception 
 	 */
-	private String sendInvitionLink(String replyTo, String username, String message,
-			String baseurl, String email, String subject,
-			String invitationsHash, Date dStart, Date dEnd, Long language_id, String fromUserField) {
-		try {
-
-			String invitation_link = baseurl + "?invitationHash="
-					+ invitationsHash;
+	private void sendInvitionLink(Appointment a, MeetingMember mm, MessageType type, boolean ical) throws Exception	{
+		
+		User owner = a.getOwner();
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		Long langId = mm.getUser().getLanguage_id();
+		TimeZone tz = timezoneUtil.getTimeZone(mm.getUser());
+		String subject = null;
+		String message = null;
+		switch (type) {
+			case Cancel:
+				subject = formatCancelSubject(langId, a, tz);
+				message = formatCancelMessage(langId, a, tz, invitorName);
+				break;
+			case Create:
+				subject = formatSubject(langId, a, tz);
+				message = formatMessage(langId, a, tz, invitorName);
+				break;
+			case Update:
+			default:
+				subject = formatUpdateSubject(langId, a, tz);
+				message = formatUpdateMessage(langId, a, tz, invitorName);
+				break;
+			
+		}
+		sendInvitionLink(mm.getInvitation(), type, subject, message, ical);
+	}
+	
+	public void sendInvitionLink(Invitation i, MessageType type, String subject, String message, boolean ical) throws Exception {
+		String invitation_link = i.getBaseUrl();
+		if (i.getInvitee().getType() == Type.contact) {
+			invitation_link += "?invitationHash=" + i.getHash();
 
-            if (language_id > 0) {
-                invitation_link += "&language=" + language_id.toString();
+            if (i.getInvitee().getLanguage_id() > 0) {
+                invitation_link += "&language=" + i.getInvitee().getLanguage_id().toString();
             }
+		} else {
+			invitation_link = getRoomUrlFragment(i.getRoom().getRooms_id()).getLink(i.getBaseUrl());
+		}
+		User owner = i.getInvitedBy();
+		
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		String template = InvitationTemplate.getEmail(invitorName, message, invitation_link);
+		String email = i.getInvitee().getAdresses().getEmail();
+		String replyToEmail = owner.getAdresses().getEmail();
+		
+		if (ical) {
+			String username = i.getInvitee().getLogin();
+			boolean isOwner = owner.getUser_id() == i.getInvitee().getUser_id();
+			IcalHandler handler = new IcalHandler(MessageType.Cancel == type ? IcalHandler.ICAL_METHOD_CANCEL : IcalHandler.ICAL_METHOD_REQUEST);
 
-			String template = InvitationTemplate.getEmail(fromUserField, message, invitation_link);
+			HashMap<String, String> attendeeList = handler.getAttendeeData(email, username, isOwner);
 
-			mailHandler.send(email, replyTo, subject, template);
-			return "success";
-		} catch (Exception err) {
-			log.error("sendInvitationLink", err);
-		}
-		return null;
-	}
+			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
+			atts.add(attendeeList);
 
+			// Defining Organizer
 
-	/**
-	 * @author vasya
-	 * 
-     * @param invitor
-     * @param meetingMember
-     * @param appointment
-     * @param message
-     * @param baseurl
-     * @param subject
-     * @param invitationsHash
-	 */
-	private String sendInvitionLink(User invitor, MeetingMember meetingMember,
-			Appointment appointment,
-			String message,
-			String baseurl, String subject,
-			String invitationsHash) {
-		try {
+			HashMap<String, String> organizerAttendee = handler.getAttendeeData(email, username, isOwner);
+			organizerAttendee = handler.getAttendeeData(replyToEmail, owner.getLogin(), isOwner);
 
-			String invitation_link = baseurl;
-			if (meetingMember.getUser().getType() == Type.contact) {
-				invitation_link += "?invitationHash="
-					+ invitationsHash;
-
-	            if (invitor.getLanguage_id() > 0) {
-	                invitation_link += "&language=" + invitor.getLanguage_id().toString();
-	            }
-			}
+			Appointment a = i.getAppointment();
+			// Create ICal Message
+			//FIXME should be checked to generate valid time
+			String meetingId = handler.addNewMeeting(a.getStart(), a.getEnd(),
+					a.getTitle(), atts, invitation_link,
+					organizerAttendee, a.getIcalId(), timezoneUtil.getTimeZone(owner));
 
-			String template = InvitationTemplate.getEmail(invitor.getFirstname() + " " + invitor.getLastname(), message, invitation_link);
+			// Writing back meetingUid
+			if (a.getIcalId() == null || a.getIcalId().length() < 1) {
+				a.setIcalId(meetingId);
+			}
 
-			mailHandler.send(meetingMember.getUser().getAdresses().getEmail(), invitor.getAdresses().getEmail(), subject, template);
-			return "success";
-		} catch (Exception err) {
-			log.error("sendInvitationLink", err);
+			log.debug(handler.getICalDataAsString());
+			mailHandler.send(new MailMessage(email, replyToEmail, subject, template, handler.getIcalAsByteArray()));
+		} else {
+			mailHandler.send(email, replyToEmail, subject, template);
 		}
-		return null;
 	}
 
 	/**
@@ -898,266 +530,6 @@ public class InvitationManager {
 		return false;
 	}
 
-	// ----------------------------------------------------------------------------------------------------
-
-	/**
-	 * 
-	 * @param email
-	 * @param point
-	 * @param cancelling_person
-	 * @return
-	 */
-	// --------------------------------------------------------------------------------------------------------------
-	private String sendInvitationCancelMail(String email, Appointment point,
-			String cancelling_person, String subject, String message) {
-		log.debug("sendInvitationCancelmail");
-		try {
-			mailHandler.send(email, subject, message);
-			return "success";
-		} catch (Exception e) {
-			log.error("sendInvitationCancelmail : " + e.getMessage());
-		}
-
-		return null;
-	}
-
-	// --------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * 
-	 * @param email
-	 * @param point
-	 * @param replyTo
-	 * @param subject
-	 * @param mesage
-	 * @return
-	 */
-	// --------------------------------------------------------------------------------------------------------------
-	private String sendInvitationUpdateMail(String email, Appointment point,
-			String replyTo, String subject, String message) {
-		log.debug("sendInvitationUpdateMail");
-		try {
-			mailHandler.send(email, replyTo, subject, message);
-			return "success";
-		} catch (Exception e) {
-			log.error("sendInvitationUpdateMail : " + e.getMessage());
-		}
-
-		return null;
-	}
-
-	// --------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * 
-	 * @param email
-	 * @param point
-	 * @param cancelling_person
-	 * @return
-	 */
-	// --------------------------------------------------------------------------------------------------------------
-	private String sendInvitationIcalCancelMail(String email, String userName,
-			Appointment point, Long organizer_userId, Boolean invitor,
-			Date startdate, Date enddate, TimeZone timezone, String subject,
-			String message) throws Exception {
-		log.debug("sendInvitationIcalCancelMail");
-
-		// Defining Organizer
-		User user = userManager.getUserById(organizer_userId);
-
-		// TODO: Check time zone handling in iCal Mail
-		IcalHandler handler = new IcalHandler(IcalHandler.ICAL_METHOD_CANCEL);
-
-		// refresh appointment
-		point = appointmentLogic.getAppointMentById(point.getId());
-
-		// Transforming Meeting Members
-
-		HashMap<String, String> attendeeInDerHashMap = handler.getAttendeeData(
-				email, userName, invitor);
-
-		Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
-		atts.add(attendeeInDerHashMap);
-
-		HashMap<String, String> organizer = handler.getAttendeeData(user
-				.getAdresses().getEmail(), user.getLogin(), invitor);
-
-		handler.addNewMeeting(startdate, enddate, 
-				point.getTitle(), atts,
-				subject, organizer, point.getIcalId(), timezone);
-
-		log.debug(handler.getICalDataAsString());
-
-		mailHandler.send(new MailMessage(email, user.getAdresses().getEmail(), subject, message, handler.getIcalAsByteArray()));
-
-		return null;
-	}
-
-	// --------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * 
-	 * @param email
-	 * @param point
-	 * @param cancelling_person
-	 * @return
-	 */
-	// --------------------------------------------------------------------------------------------------------------
-	private String sendInvitationIcalUpdateMail(String email, String userName,
-			Appointment point, Long organizer_userId, Boolean invitor,
-			Long language_id, Date starttime, Date endtime, TimeZone timeZone,
-			String subject, String message) throws Exception {
-		log.debug("sendInvitationIcalUpdateMail");
-
-		// Defining Organizer
-		User user = userManager.getUserById(organizer_userId);
-
-		IcalHandler handler = new IcalHandler(IcalHandler.ICAL_METHOD_REQUEST);
-
-		// refresh appointment
-		point = appointmentLogic.getAppointMentById(point.getId());
-
-		// Transforming Meeting Members
-
-		HashMap<String, String> attendeeInDerHashMap = handler.getAttendeeData(
-				email, userName, invitor);
-
-		Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
-		atts.add(attendeeInDerHashMap);
-
-		HashMap<String, String> organizer = handler.getAttendeeData(user
-				.getAdresses().getEmail(), user.getLogin(), invitor);
-
-		handler.addNewMeeting(starttime, endtime, point.getTitle(), atts,
-				subject, organizer, point.getIcalId(), timeZone);
-
-		log.debug(handler.getICalDataAsString());
-
-		mailHandler.send(new MailMessage(email, user.getAdresses().getEmail(), subject, message, handler.getIcalAsByteArray()));
-
-		return null;
-	}
-
-	// --------------------------------------------------------------------------------------------------------------
-
-	/**
-	 * 
-	 * @param username
-	 * @param message
-	 * @param baseurl
-	 * @param email
-	 * @param subject
-	 * @param invitationsHash
-	 * @param appointMentId
-     * @param organizer_userId
-     * @param invitor
-     * @param language_id   If it is >0 then "&language=" is added to the link
-     * @param starttime
-     * @param endtime
-     * @param timezone
-	 * @return
-	 */
-	public String sendInvitionIcalLink(String username, String message,
-			String baseurl, String email, String subject,
-			String invitationsHash, Long appointMentId, User organizer,
-			Boolean invitor, Long language_id, Date starttime, Date endtime,
-			TimeZone timezone, String fromUserField) {
-		try {
-
-			String invitation_link = baseurl;
-			if (invitationsHash.length() > 0) {
-				invitation_link += "?invitationHash="
-					+ invitationsHash;
-
-	            if (language_id > 0) {
-	                invitation_link += "&language=" + language_id.toString();
-	            }
-			}
-
-			String template = InvitationTemplate.getEmail(fromUserField, message, invitation_link);
-
-			IcalHandler handler = new IcalHandler(IcalHandler.ICAL_METHOD_REQUEST);
-
-			Appointment point = appointmentLogic.getAppointMentById(appointMentId);
-
-			// Transforming Meeting Members
-
-			HashMap<String, String> attendeeList = handler.getAttendeeData(email, username, invitor);
-
-			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
-			atts.add(attendeeList);
-
-			// Defining Organizer
-
-			HashMap<String, String> organizerAttendee = handler
-					.getAttendeeData(email, username, invitor);
-			String replyToEmail = null;
-			if (organizer != null) {
-				replyToEmail = organizer.getAdresses().getEmail();
-				organizerAttendee = handler.getAttendeeData(replyToEmail, organizer.getLogin(), invitor);
-			}
-
-			// Create ICal Message
-			String meetingId = handler.addNewMeeting(starttime, endtime,
-					point.getTitle(), atts, invitation_link,
-					organizerAttendee, point.getIcalId(), timezone);
-
-			// Writing back meetingUid
-			if (point.getIcalId() == null || point.getIcalId().length() < 1) {
-				point.setIcalId(meetingId);
-
-				appointmentDaoImpl.updateAppointment(point);
-			}
-
-			log.debug(handler.getICalDataAsString());
-
-			mailHandler.send(new MailMessage(email, replyToEmail, subject, template, handler.getIcalAsByteArray()));
-
-			return "success";
-		} catch (Exception err) {
-			log.error("sendInvitionIcalLink", err);
-		}
-		return null;
-	}
-
-	/**
-	 * 
-	 * @param user_level
-	 * @param username
-	 * @param message
-	 * @param domain
-	 * @param room
-	 * @param roomtype
-	 * @param baseurl
-	 * @param email
-	 * @param subject
-	 * @param room_id
-	 * @return
-	 */
-	public String sendInvitionLink(Long user_level, String username,
-			String message, String domain, String room, String roomtype,
-			String baseurl, String email, String replyTo, String subject, Long room_id,
-			Date starttime, Date endtime) {
-		try {
-			if (authLevelUtil.checkUserLevel(user_level)) {
-
-				String invitation_link = baseurl
-						+ "?lzproxied=solo&lzr=swf8&lzt=swf&domain=" + domain
-						+ "&room=" + room + "&roomtype=" + roomtype + "&email="
-						+ email + "&roomid=" + room_id;
-
-				String template = InvitationTemplate.getEmail(username, message, invitation_link);
-
-				mailHandler.send(email, replyTo, subject, template);
-				return "success";
-			}
-		} catch (Exception err) {
-			log.error("sendInvitationLink", err);
-		}
-		return null;
-	}
-
-
 	/**
 	 * 
 	 * @param hashCode
@@ -1166,68 +538,65 @@ public class InvitationManager {
 	 */
 	public Object getInvitationByHashCode(String hashCode, boolean hidePass) {
 		try {
-			Invitations invitation = invitationDao.getInvitationByHashCode(hashCode, hidePass);
+			Invitation invitation = invitationDao.getInvitationByHashCode(hashCode, hidePass);
 
 			if (invitation == null) {
 				// already deleted or does not exist
 				return new Long(-31);
 			} else {
-				if (invitation.getCanBeUsedOnlyOneTime()) {
-
-					// do this only if the user tries to get the Invitation, not
-					// while checking the PWD
-					if (hidePass) {
-						// one-time invitation
-						if (invitation.getInvitationWasUsed()) {
-							// Invitation is of type *only-one-time* and was
-							// already used
-							return new Long(-32);
+				switch (invitation.getValid()) {
+					case OneTime:
+						// do this only if the user tries to get the Invitation, not
+						// while checking the PWD
+						if (hidePass) {
+							// one-time invitation
+							if (invitation.isUsed()) {
+								// Invitation is of type *only-one-time* and was
+								// already used
+								return new Long(-32);
+							} else {
+								// set to true if this is the first time / a normal
+								// getInvitation-Query
+								invitation.setUsed(true);
+								invitationDao.update(invitation);
+								// invitation.setInvitationpass(null);
+								invitation.setAllowEntry(true);
+							}
 						} else {
-							// set to true if this is the first time / a normal
-							// getInvitation-Query
-							invitation.setInvitationWasUsed(true);
-							invitationDao.updateInvitation(invitation);
+							invitation.setAllowEntry(true);
+						}
+						break;
+					case Period:
+						TimeZone tz = timezoneUtil.getTimeZone(invitation.getInvitee());
+						Calendar now = Calendar.getInstance(tz);
+						Calendar start = Calendar.getInstance(tz);
+						start.setTime(invitation.getValidFrom());
+
+						Calendar end = Calendar.getInstance(tz);
+						end.setTime(invitation.getValidTo());
+						if (now.after(start) && now.before(end)) {
+							invitationDao.update(invitation);
 							// invitation.setInvitationpass(null);
 							invitation.setAllowEntry(true);
-							return invitation;
+						} else {
+
+							// Invitation is of type *period* and is not valid
+							// anymore, this is an extra hook to display the time
+							// correctly
+							// in the method where it shows that the hash code does
+							// not work anymore
+							invitation.setAllowEntry(false);
 						}
-					} else {
-						invitation.setAllowEntry(true);
-						return invitation;
-					}
+						break;
+					case Endless:
+					default:
+						invitationDao.update(invitation);
 
-				} else if (invitation.getIsValidByTime()) {
-							
-					Calendar now = Calendar.getInstance(timezoneUtil.getTimeZone(invitation.getTimeZoneId()));
-					Calendar start = Calendar.getInstance(timezoneUtil.getTimeZone(invitation.getTimeZoneId()));
-					start.setTime(invitation.getValidFrom());
-
-					Calendar end = Calendar.getInstance(timezoneUtil.getTimeZone(invitation.getTimeZoneId()));
-					end.setTime(invitation.getValidTo());
-					if (now.after(start) && now.before(end)) {
-						invitationDao.updateInvitation(invitation);
-						// invitation.setInvitationpass(null);
 						invitation.setAllowEntry(true);
-						return invitation;
-					} else {
-
-						// Invitation is of type *period* and is not valid
-						// anymore, this is an extra hook to display the time
-						// correctly
-						// in the method where it shows that the hash code does
-						// not work anymore
-						invitation.setAllowEntry(false);
-
-						return invitation;
-					}
-				} else {
-					// Invitation is not limited, neither time nor single-usage
-					invitationDao.updateInvitation(invitation);
-
-					invitation.setAllowEntry(true);
-					// invitation.setInvitationpass(null);
-					return invitation;
+						// invitation.setInvitationpass(null);
+						break;
 				}
+				return invitation;
 			}
 
 		} catch (Exception err) {
@@ -1246,15 +615,15 @@ public class InvitationManager {
 		try {
 			Object obj = this.getInvitationByHashCode(hashCode, false);
 			log.debug("checkInvitationPass - obj: " + obj);
-			if (obj instanceof Invitations) {
-				Invitations invitation = (Invitations) obj;
+			if (obj instanceof Invitation) {
+				Invitation invitation = (Invitation) obj;
 
 				// log.debug("invitationId "+invitation.getInvitations_id());
 				// log.debug("pass "+pass);
 				// log.debug("getInvitationpass "+invitation.getInvitationpass());
 
 				if (manageCryptStyle.getInstanceOfCrypt().verifyPassword(pass,
-						invitation.getInvitationpass())) {
+						invitation.getPassword())) {
 					return new Long(1);
 				} else {
 					return new Long(-34);

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/InvitationDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/InvitationDao.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/InvitationDao.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/InvitationDao.java Thu Sep 12 01:21:26 2013
@@ -19,7 +19,6 @@
 package org.apache.openmeetings.data.conference.dao;
 
 import java.util.Date;
-import java.util.List;
 
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
@@ -27,7 +26,7 @@ import javax.persistence.PersistenceCont
 import javax.persistence.TypedQuery;
 
 import org.apache.openmeetings.OpenmeetingsVariables;
-import org.apache.openmeetings.persistence.beans.invitation.Invitations;
+import org.apache.openmeetings.persistence.beans.invitation.Invitation;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.transaction.annotation.Transactional;
@@ -41,9 +40,9 @@ public class InvitationDao {
 	@PersistenceContext
 	private EntityManager em;
 	
-	public Invitations updateInvitation(Invitations invitation) throws Exception {
-		invitation.setUpdatetime(new Date());
-		if (invitation.getInvitations_id() == null) {
+	public Invitation update(Invitation invitation) {
+		invitation.setUpdated(new Date());
+		if (invitation.getId() == null) {
 			em.persist(invitation);
 			return invitation;
 		} else {
@@ -54,10 +53,10 @@ public class InvitationDao {
 		return null;
 	}
 	
-	public Invitations getInvitationbyId(Long invId) {
+	public Invitation get(Long invId) {
 		try {
 			
-			TypedQuery<Invitations> query = em.createNamedQuery("getInvitationbyId", Invitations.class);
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationbyId", Invitation.class);
 			query.setParameter("deleted", true);
 			query.setParameter("invid", invId);
 			
@@ -72,10 +71,10 @@ public class InvitationDao {
 		return null;
 	}
 	
-	public Invitations getInvitationByHashCode(String hashCode, boolean hidePass) {
+	public Invitation getInvitationByHashCode(String hashCode, boolean hidePass) {
 		try {
 			
-			TypedQuery<Invitations> query = em.createNamedQuery("getInvitationByHashCode", Invitations.class);
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationByHashCode", Invitation.class);
 			query.setParameter("hashCode", hashCode);
 			query.setParameter("deleted", false);
 			
@@ -89,33 +88,4 @@ public class InvitationDao {
 		}
 		return null;
 	}
-	
-	public void updateInvitationByAppointment(Long appointmentId,
-			Date appointmentstart, Date appointmentend) {
-		try {
-
-			Date gmtTimeStartShifted = new Date(appointmentstart.getTime()
-					- (5 * 60 * 1000));
-
-			TypedQuery<Invitations> query = em.createNamedQuery("getInvitationByAppointment", Invitations.class);
-			query.setParameter("appointmentId", appointmentId);
-
-			List<Invitations> listInvitations = query.getResultList();
-
-			for (Invitations inv : listInvitations) {
-				inv.setValidFrom(gmtTimeStartShifted);
-				inv.setValidTo(appointmentend);
-				if (inv.getInvitations_id() == null) {
-					em.persist(inv);
-				} else {
-					if (!em.contains(inv)) {
-						em.merge(inv);
-					}
-				}
-			}
-
-		} catch (Exception err) {
-			log.error("updateInvitationByAppointment : ", err);
-		}
-	}
 }

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/RoomDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/RoomDao.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/RoomDao.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/conference/dao/RoomDao.java Thu Sep 12 01:21:26 2013
@@ -107,7 +107,7 @@ public class RoomDao implements IDataPro
 		//TODO generalize with AppointmentDao
 		log.debug("getAppointedRoomsByUser : UserID - " + userId);
 
-		TimeZone timeZone = timezoneUtil.getTimezoneByUser(usersDao.get(userId));
+		TimeZone timeZone = timezoneUtil.getTimeZone(usersDao.get(userId));
 
 		Calendar startCal = Calendar.getInstance(timeZone);
 		startCal.set(Calendar.MINUTE, 0);

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/UserManager.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/UserManager.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/UserManager.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/UserManager.java Thu Sep 12 01:21:26 2013
@@ -1175,30 +1175,6 @@ public class UserManager {
 
 	}
 
-	public User getUserByEmail(String userOrEmail) throws Exception {
-		log.debug("Usermanagement.getUserByEmail : " + userOrEmail);
-
-		String hql = "SELECT c from User AS c " + "WHERE "
-				+ "c.adresses.email LIKE :userOrEmail";
-
-		TypedQuery<User> query = em.createQuery(hql, User.class);
-		query.setParameter("userOrEmail", userOrEmail);
-
-		List<User> ll = query.getResultList();
-
-		if (ll.size() > 1) {
-			log.error("ALERT :: There are two users in the database that have same Email ");
-			return ll.get(0);
-			// throw new
-			// Exception("ALERT :: There are two users in the database that have either same login or Email ");
-		} else if (ll.size() == 1) {
-			return ll.get(0);
-		} else {
-			return null;
-		}
-
-	}
-
 	// -----------------------------------------------------------------------------------------------------
 
 	/**

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AbstractUserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AbstractUserDao.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AbstractUserDao.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AbstractUserDao.java Thu Sep 12 01:21:26 2013
@@ -86,7 +86,7 @@ public class AbstractUserDao  {
 									// configurable
 		user.setLevel_id(1L);
 		user.setLanguage_id(configurationDao.getConfValue(DEFAUT_LANG_KEY, Long.class, "1"));
-		user.setTimeZoneId(timezoneUtil.getTimezoneByUser(currentUser).getID());
+		user.setTimeZoneId(timezoneUtil.getTimeZone(currentUser).getID());
 		user.setForceTimeZoneCheck(false);
 		user.setSendSMS(false);
 		user.setAge(new Date());
@@ -107,7 +107,7 @@ public class AbstractUserDao  {
 		return q.getResultList();
 	}
 	
-	private String getAdditionalWhire(boolean isAdmin){
+	private String getAdditionalWhere(boolean isAdmin){
 		return isAdmin ? null : "u.type <> :contact OR (u.type = :contact AND u.owner_id = :ownerId)";
 	}
 	
@@ -119,7 +119,7 @@ public class AbstractUserDao  {
 	}
 
 	public List<User> get(String search, int start, int count, String sort, boolean isAdmin) {
-		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, false, getAdditionalWhire(isAdmin), sort, searchFields), User.class);
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, false, getAdditionalWhere(isAdmin), sort, searchFields), User.class);
 		q.setFirstResult(start);
 		q.setMaxResults(count);
 		setAdditionalParams(q, isAdmin);
@@ -133,13 +133,13 @@ public class AbstractUserDao  {
 	}
 
 	public long count(String search, boolean isAdmin) {
-		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, true, getAdditionalWhire(isAdmin), null, searchFields), Long.class);
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, true, getAdditionalWhere(isAdmin), null, searchFields), Long.class);
 		setAdditionalParams(q, isAdmin);
 		return q.getSingleResult();
 	}
 	
 	public List<User> get(String search, boolean isAdmin) {
-		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, false, getAdditionalWhire(isAdmin), null, searchFields), User.class);
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", search, true, false, getAdditionalWhere(isAdmin), null, searchFields), User.class);
 		if (!isAdmin) {
 			q.setParameter("ownerId", WebSession.getUserId());
 			q.setParameter("contact", Type.contact);
@@ -315,20 +315,15 @@ public class AbstractUserDao  {
 	}
 
 	public User getUserByEmail(String email) {
+		TypedQuery<User> query = em.createNamedQuery("getUserByEmail", User.class);
+		query.setParameter("email", email);
+		query.setParameter("deleted", true);
+		User us = null;
 		try {
-			TypedQuery<User> query = em.createNamedQuery("getUserByEmail", User.class);
-			query.setParameter("email", email);
-			query.setParameter("deleted", true);
-			User us = null;
-			try {
-				us = query.getSingleResult();
-			} catch (NoResultException ex) {
-			}
-			return us;
-		} catch (Exception e) {
-			log.error("[getUserByEmail] " + email, e);
+			us = query.getSingleResult();
+		} catch (NoResultException ex) {
 		}
-		return null;
+		return us;
 	}
 
 	public Object getUserByHash(String hash) {
@@ -389,4 +384,32 @@ public class AbstractUserDao  {
 
 	}
 
+	public User getContact(String email, long ownerId) {
+		return getContact(email, "", "", ownerId);
+	}
+	
+	public User getContact(String email, User owner) {
+		return getContact(email, "", "", null, null, owner);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, long ownerId) {
+		return getContact(email, firstName, lastName, null, null, get(ownerId));
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, User owner) {
+		User to = getUserByEmail(email);
+		if (to == null) {
+			to = new User();
+			to.setType(Type.contact);
+			to.setLogin(owner.getUser_id() + "_" + email); //UserId prefix is used to ensure unique login
+			to.setFirstname(firstName);
+			to.setLastname(lastName);
+			to.setLanguage_id(null == langId ? owner.getLanguage_id() : langId);
+			to.setOwnerId(owner.getUser_id());
+			to.setAdresses(new Address());
+			to.getAdresses().setEmail(email);
+			to.setTimeZoneId(null == tzId ? owner.getTimeZoneId() : tzId);
+		}
+		return to;
+	}
 }

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AdminUserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AdminUserDao.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AdminUserDao.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/AdminUserDao.java Thu Sep 12 01:21:26 2013
@@ -108,5 +108,20 @@ public class AdminUserDao implements IDa
 	public Object getUserByHash(String hash) {
 		return dao.getUserByHash(hash);
 	}
-
+	
+	public User getContact(String email, User owner) {
+		return dao.getContact(email, owner);
+	}
+	
+	public User getContact(String email, long ownerId) {
+		return dao.getContact(email, ownerId);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, long ownerId) {
+		return dao.getContact(email, firstName, lastName, ownerId);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, long ownerId) {
+		return dao.getContact(email, firstName, lastName, langId, tzId, dao.get(ownerId));
+	}
 }

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/UserDao.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/UserDao.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/UserDao.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/data/user/dao/UserDao.java Thu Sep 12 01:21:26 2013
@@ -26,7 +26,6 @@ import org.apache.openmeetings.persisten
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class UserDao implements IDataProviderDao<User> {
-	
 	@Autowired
 	private AbstractUserDao dao;
 
@@ -65,5 +64,12 @@ public class UserDao implements IDataPro
 	public void delete(User entity, Long userId) {
 		dao.delete(entity, userId);
 	}
-
+	
+	public User getContact(String email, long ownerId) {
+		return dao.getContact(email, ownerId);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, long ownerId) {
+		return dao.getContact(email, firstName, lastName, ownerId);
+	}
 }

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/Appointment.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/Appointment.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/Appointment.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/Appointment.java Thu Sep 12 01:21:26 2013
@@ -51,46 +51,59 @@ import org.simpleframework.xml.Root;
     @NamedQuery(name="getAppointmentById", query="SELECT a FROM Appointment a LEFT JOIN FETCH a.meetingMembers"
     		+ " WHERE a.deleted = false AND a.id = :id")
     , @NamedQuery(name="appointmentsInRange",
-        	query="SELECT a FROM Appointment a LEFT JOIN FETCH a.meetingMembers "
-    			+ "WHERE a.deleted = false "
-    			+ "	AND ( "
-    			+ "		(a.start BETWEEN :starttime AND :endtime) "
-    			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
-    			+ "		OR (a.start < :starttime AND a.end > :endtime) "
-    			+ "	)"
-    			+ "	AND a.owner.user_id = :userId"
+    	query="SELECT a FROM Appointment a LEFT JOIN FETCH a.meetingMembers "
+			+ "WHERE a.deleted = false "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+			+ "	AND a.owner.user_id = :userId"
     	)
     , @NamedQuery(name="joinedAppointmentsInRange",
-	query="SELECT a FROM MeetingMember mm INNER JOIN mm.appointment a LEFT JOIN FETCH a.meetingMembers "
-		+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
-		+ "	AND a.id NOT IN (SELECT a.id FROM Appointment a WHERE a.owner.user_id = :userId)"
-		+ "	AND mm.connectedEvent = false " //TODO review: isConnectedEvent is set for the MeetingMember if event is created from "Private Messages", it is weird
-		+ "	AND ( "
-		+ "		(a.start BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.end BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.start < :starttime AND a.end > :endtime) "
-		+ "	)"
-)
+		query="SELECT a FROM MeetingMember mm INNER JOIN mm.appointment a LEFT JOIN FETCH a.meetingMembers "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND a.id NOT IN (SELECT a.id FROM Appointment a WHERE a.owner.user_id = :userId)"
+			+ "	AND mm.connectedEvent = false " //TODO review: isConnectedEvent is set for the MeetingMember if event is created from "Private Messages", it is weird
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="appointmentsInRangeRemind",
+		query="SELECT a FROM MeetingMember mm INNER JOIN mm.appointment a LEFT JOIN FETCH a.meetingMembers "
+			//only ReminderType simple mail is concerned!
+			+ "WHERE mm.deleted = false AND a.deleted = false AND a.reminderEmailSend = false"
+			+ " AND (a.remind.typId = 2 OR a.remind.typId = 3) "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="getAppointmentByRoomId", query="SELECT a FROM Appointment a LEFT JOIN FETCH a.meetingMembers"
+    		+ " WHERE a.deleted = false AND a.room.rooms_id = :room_id")
 	//TODO this query returns duplicates if the user books an appointment with
 	//his own user as second meeting-member, swagner 19.02.2012
     , @NamedQuery(name="appointmentsInRangeByUser",
-	query="SELECT a FROM MeetingMember mm, IN(mm.appointment) a "
-		+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
-		+ "	AND ( "
-		+ "		(a.start BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.end BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.start < :starttime AND a.end > :endtime) "
-		+ "	)"
-    )
+		query="SELECT a FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
     , @NamedQuery(name="appointedRoomsInRangeByUser",
-	query="SELECT a.room FROM MeetingMember mm, IN(mm.appointment) a "
-		+ "WHERE mm.deleted <> true AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
-		+ "	AND ( "
-		+ "		(a.start BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.end BETWEEN :starttime AND :endtime) "
-		+ "		OR (a.start < :starttime AND a.end > :endtime) "
-		+ "	)"
-    )
+		query="SELECT a.room FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted <> true AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
 })
 @Root(name="appointment")
 public class Appointment implements Serializable {
@@ -246,7 +259,7 @@ public class Appointment implements Seri
 		this.start = start;
 	}
 
-	public Date end() {
+	public Date getEnd() {
 		return end;
 	}
 

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/calendar/MeetingMember.java Thu Sep 12 01:21:26 2013
@@ -30,16 +30,25 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
-import org.apache.openmeetings.persistence.beans.invitation.Invitations;
+import org.apache.openmeetings.persistence.beans.invitation.Invitation;
 import org.apache.openmeetings.persistence.beans.user.User;
 import org.simpleframework.xml.Element;
 import org.simpleframework.xml.Root;
 
 @Entity
 @Table(name = "meeting_members")
+@NamedQueries({
+    @NamedQuery(name="getMeetingMemberById"
+    		, query="SELECT mm FROM MeetingMember mm WHERE mm.deleted = false AND mm.id = :id")
+    , @NamedQuery(name="getMeetingMembers", query="SELECT mm FROM MeetingMember mm")
+    , @NamedQuery(name="getMeetingMemberIdsByAppointment"
+    		, query="SELECT mm.id FROM MeetingMember mm WHERE mm.deleted = false AND app.appointment.id = :id")
+})
 @Root(name = "meetingmember")
 public class MeetingMember implements Serializable {
 	private static final long serialVersionUID = -3864571325368787524L;
@@ -75,10 +84,10 @@ public class MeetingMember implements Se
 	@Element(data = true)
 	private boolean deleted;
 
-	@ManyToOne(fetch = FetchType.EAGER)
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
 	@JoinColumn(name = "invitation", nullable = true, insertable = false)
 	@ForeignKey(enabled = true)
-	private Invitations invitation;
+	private Invitation invitation;
 
 	/**
 	 * java.util.TimeZone Id
@@ -122,11 +131,11 @@ public class MeetingMember implements Se
 		this.appointment = appointment;
 	}
 
-	public Invitations getInvitation() {
+	public Invitation getInvitation() {
 		return invitation;
 	}
 
-	public void setInvitation(Invitations invitation) {
+	public void setInvitation(Invitation invitation) {
 		this.invitation = invitation;
 	}
 

Copied: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitation.java (from r1520866, openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitations.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitation.java?p2=openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitation.java&p1=openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitations.java&r1=1520866&r2=1522099&rev=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitations.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/invitation/Invitation.java Thu Sep 12 01:21:26 2013
@@ -21,8 +21,11 @@ package org.apache.openmeetings.persiste
 import java.io.Serializable;
 import java.util.Date;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
@@ -34,6 +37,7 @@ import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.persistence.beans.calendar.Appointment;
 import org.apache.openmeetings.persistence.beans.room.Room;
 import org.apache.openmeetings.persistence.beans.user.User;
 
@@ -49,30 +53,40 @@ import org.apache.openmeetings.persisten
 					+ "WHERE a.appointmentId = :appointmentId  ")
 })
 @Table(name = "invitations")
-public class Invitations implements Serializable {
+public class Invitation implements Serializable {
 	private static final long serialVersionUID = 1153321347974705506L;
 
+	public enum Valid {
+		OneTime
+		, Period
+		, Endless;
+		
+		public static Valid fromInt(int valid) {
+			return valid == 1 ? Endless : (valid == 2 ? Period : OneTime);
+		}
+	}
+	
 	@Id
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id")
-	private Long invitations_id;
+	private Long id;
 
 	@ManyToOne(fetch = FetchType.EAGER)
-	@JoinColumn(name = "invitedBy", nullable = true)
+	@JoinColumn(name = "invited_by", nullable = true)
 	@ForeignKey(enabled = true)
 	private User invitedBy;
 	
-	@Column(name = "starttime")
-	private Date starttime;
+	@Column(name = "inserted")
+	private Date inserted;
 	
-	@Column(name = "updatetime")
-	private Date updatetime;
+	@Column(name = "updated")
+	private Date updated;
 	
 	@Column(name = "deleted")
 	private boolean deleted;
 
 	@ManyToOne(fetch = FetchType.EAGER)
-	@JoinColumn(name = "roomid", nullable = true)
+	@JoinColumn(name = "room_id", nullable = true)
 	@ForeignKey(enabled = true)
 	private Room room;
 
@@ -80,68 +94,51 @@ public class Invitations implements Seri
 	@Column(name = "hash")
 	private String hash;
 	
-	@Column(name = "invitedname")
-	private String invitedname;
-	
-	@Column(name = "invitedEMail")
-	private String invitedEMail;
-	
-	@Column(name = "ispasswordprotected")
-	private Boolean isPasswordProtected;
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "invitee_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private User invitee;
+
+	@Column(name = "password_protected")
+	private boolean passwordProtected;
 	
-	@Column(name = "invitationpass")
-	private String invitationpass;
-
-	// this is necessary as a room can be shared between multiple domains
-	// is either *public* or an organisation_ID
-	@Column(name = "conferencedomain")
-	private String conferencedomain;
+	@Column(name = "password")
+	private String password;
 
 	// Invitations by Time are only valid between the validFrom validTo
 	// TimeStamp
-	@Column(name = "isValidByTime")
-	private Boolean isValidByTime = false;
+	@Column(name = "valid")
+	@Enumerated(EnumType.STRING)
+	private Valid valid = Valid.Period;
 	
-	@Column(name = "validFrom")
+	@Column(name = "valid_from")
 	private Date validFrom;
 	
-	@Column(name = "validTo")
+	@Column(name = "valid_to")
 	private Date validTo;
-	// An invitation which is canBeUsedOnlyOneTime = true can be only used
-	// one-time
-	@Column(name = "canBeUsedOnlyOneTime")
-	private Boolean canBeUsedOnlyOneTime = false;
 	
-	@Column(name = "invitationWasUsed")
-	private Boolean invitationWasUsed = false;
+	@Column(name = "was_used")
+	private boolean used;
 	
-
-	@Column(name = "appointment_id")
-	private Long appointmentId;
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "appointment_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private Appointment appointment;
 
 	// BaseuRL defined at creation of InvitationLink - used for chronological
 	// reminders on serverside (updates)
-	@Column(name = "baseUrl")
+	@Column(name = "base_url")
 	private String baseUrl;
 	
-	/**
-	 * java.util.TimeZone Id
-	 */
-	@Column(name = "time_zone_id")
-	private String timeZoneId; // 
-	
+	//variable used in Flash
 	private boolean allowEntry = true;
-
-	public Invitations() {
-		super();
-	}
-
-	public Long getInvitations_id() {
-		return invitations_id;
+	
+	public Long getId() {
+		return id;
 	}
 
-	public void setInvitations_id(Long invitations_id) {
-		this.invitations_id = invitations_id;
+	public void setId(Long id) {
+		this.id = id;
 	}
 
 	public Room getRoom() {
@@ -160,20 +157,20 @@ public class Invitations implements Seri
 		this.invitedBy = invitedBy;
 	}
 
-	public Date getStarttime() {
-		return starttime;
+	public Date getInserted() {
+		return inserted;
 	}
 
-	public void setStarttime(Date starttime) {
-		this.starttime = starttime;
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
 	}
 
-	public Date getUpdatetime() {
-		return updatetime;
+	public Date getUpdated() {
+		return updated;
 	}
 
-	public void setUpdatetime(Date updatetime) {
-		this.updatetime = updatetime;
+	public void setUpdated(Date updated) {
+		this.updated = updated;
 	}
 
 	public boolean getDeleted() {
@@ -192,44 +189,28 @@ public class Invitations implements Seri
 		this.hash = hash;
 	}
 
-	public String getInvitedname() {
-		return invitedname;
-	}
-
-	public void setInvitedname(String invitedname) {
-		this.invitedname = invitedname;
-	}
-
-	public String getInvitedEMail() {
-		return invitedEMail;
-	}
-
-	public void setInvitedEMail(String invitedEMail) {
-		this.invitedEMail = invitedEMail;
+	public User getInvitee() {
+		return invitee;
 	}
 
-	public Boolean getIsPasswordProtected() {
-		return isPasswordProtected;
+	public void setInvitee(User invitee) {
+		this.invitee = invitee;
 	}
 
-	public void setIsPasswordProtected(Boolean isPasswordProtected) {
-		this.isPasswordProtected = isPasswordProtected;
+	public boolean isPasswordProtected() {
+		return passwordProtected;
 	}
 
-	public String getInvitationpass() {
-		return invitationpass;
+	public void setPasswordProtected(boolean passwordProtected) {
+		this.passwordProtected = passwordProtected;
 	}
 
-	public void setInvitationpass(String invitationpass) {
-		this.invitationpass = invitationpass;
+	public String getPassword() {
+		return password;
 	}
 
-	public String getConferencedomain() {
-		return conferencedomain;
-	}
-
-	public void setConferencedomain(String conferencedomain) {
-		this.conferencedomain = conferencedomain;
+	public void setPassword(String password) {
+		this.password = password;
 	}
 
 	public Date getValidFrom() {
@@ -248,28 +229,12 @@ public class Invitations implements Seri
 		this.validTo = validTo;
 	}
 
-	public Boolean getCanBeUsedOnlyOneTime() {
-		return canBeUsedOnlyOneTime;
-	}
-
-	public void setCanBeUsedOnlyOneTime(Boolean canBeUsedOnlyOneTime) {
-		this.canBeUsedOnlyOneTime = canBeUsedOnlyOneTime;
-	}
-
-	public Boolean getInvitationWasUsed() {
-		return invitationWasUsed;
-	}
-
-	public void setInvitationWasUsed(Boolean invitationWasUsed) {
-		this.invitationWasUsed = invitationWasUsed;
-	}
-
-	public Boolean getIsValidByTime() {
-		return isValidByTime;
+	public boolean isUsed() {
+		return used;
 	}
 
-	public void setIsValidByTime(Boolean isValidByTime) {
-		this.isValidByTime = isValidByTime;
+	public void setUsed(boolean used) {
+		this.used = used;
 	}
 
 	public String getBaseUrl() {
@@ -280,14 +245,22 @@ public class Invitations implements Seri
 		this.baseUrl = baseUrl;
 	}
 
-	public Long getAppointmentId() {
-		return appointmentId;
+	public Appointment getAppointment() {
+		return appointment;
 	}
 
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
+	public void setAppointment(Appointment appointment) {
+		this.appointment = appointment;
 	}
 
+	public Valid getValid() {
+		return valid;
+	}
+
+	public void setValid(Valid valid) {
+		this.valid = valid;
+	}
+	
 	public boolean isAllowEntry() {
 		return allowEntry;
 	}
@@ -295,13 +268,4 @@ public class Invitations implements Seri
 	public void setAllowEntry(boolean allowEntry) {
 		this.allowEntry = allowEntry;
 	}
-
-	public String getTimeZoneId() {
-		return timeZoneId;
-	}
-
-	public void setTimeZoneId(String timeZoneId) {
-		this.timeZoneId = timeZoneId;
-	}
-
 }

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/user/User.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/user/User.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/user/User.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/persistence/beans/user/User.java Thu Sep 12 01:21:26 2013
@@ -262,9 +262,9 @@ public class User implements Serializabl
 	@Enumerated(EnumType.STRING)
 	private Type type = Type.user;
 
-	@Column(name = "ownerId")
+	@Column(name = "owner_id")
 	@Element(data = true, required = false)
-	private Long owner_id;
+	private Long ownerId;
 	
 	public Long getUser_id() {
 		return user_id;
@@ -600,12 +600,12 @@ public class User implements Serializabl
 		this.type = type;
 	}
 	
-	public Long getOwner_id(){
-		return owner_id;
+	public Long getOwnerId(){
+		return ownerId;
 	}
 	
-	public void setOwner_id(Long owner_id){
-		this.owner_id = owner_id;
+	public void setOwnerId(Long ownerId){
+		this.ownerId = ownerId;
 	}
 
 	@Override

Modified: openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/ConferenceService.java?rev=1522099&r1=1522098&r2=1522099&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/ConferenceService.java (original)
+++ openmeetings/trunk/singlewebapp/src/main/java/org/apache/openmeetings/remote/ConferenceService.java Thu Sep 12 01:21:26 2013
@@ -308,7 +308,7 @@ public class ConferenceService {
 			returnMap.put("appointment", appointment);
 
 			User us = userManager.getUserById(currentClient.getUser_id());
-			TimeZone timezone = timezoneUtil.getTimezoneByUser(us);
+			TimeZone timezone = timezoneUtil.getTimeZone(us);
 
 			returnMap.put("appointment", appointment);
 
@@ -319,7 +319,7 @@ public class ConferenceService {
 			returnMap.put(
 					"end",
 					CalendarPatterns.getDateWithTimeByMiliSeconds(
-							appointment.end(), timezone));
+							appointment.getEnd(), timezone));
 			returnMap.put("timeZone", timezone.getDisplayName());
 
 			return returnMap;