/** * A base class that creates some basic Quick Command shortcuts in the mailbox. This class should * only be used when testing Quick Commands. * * @author Matt Rhoades */ public class AjaxQuickCommandTest extends AjaxCommonTest { protected static Logger logger = LogManager.getLogger(AjaxQuickCommandTest.class); private QuickCommand command1; private QuickCommand command2; private QuickCommand command3; public AjaxQuickCommandTest() { logger.info("New " + AjaxQuickCommandTest.class.getCanonicalName()); command1 = null; command2 = null; command3 = null; } /** * Quick Command: Item Type: Mail Action 1: Tag Action 2: Mark Read Action 3: Mark Flagged Action * 4: Move To Subfolder * * @throws HarnessException */ protected QuickCommand getQuickCommand01() throws HarnessException { if (command1 != null) { // Command already exists, just return it return (command1); } // Create a tag String tagname = "tag" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateTagRequest xmlns='urn:zimbraMail'>" + "<tag name='" + tagname + "' color='1' />" + "</CreateTagRequest>"); TagItem tag = TagItem.importFromSOAP(ZimbraAccount.AccountZWC(), tagname); ZAssert.assertNotNull(tag, "Verify the tag was created"); // Create a subfolder String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateFolderRequest xmlns='urn:zimbraMail'>" + "<folder name='" + foldername + "' l='1' view='message'/>" + "</CreateFolderRequest>"); FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountZWC(), foldername); ZAssert.assertNotNull(folder, "Verify the subfolder is available"); // Create the list of actions ArrayList<QuickCommandAction> actions = new ArrayList<QuickCommandAction>(); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionTag, tag.getId(), true)); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "read", true)); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "flagged", true)); actions.add( new QuickCommandAction(QuickCommandAction.TypeId.actionFileInto, folder.getId(), true)); String name = "name" + ZimbraSeleniumProperties.getUniqueString(); String description = "description" + ZimbraSeleniumProperties.getUniqueString(); command1 = new QuickCommand(name, description, ItemTypeId.MSG, true); command1.addActions(actions); return (command1); } /** * Quick Command: Item Type: Contact Action 1: Tag Action 2: Move To Subfolder * * @throws HarnessException */ protected QuickCommand getQuickCommand02() throws HarnessException { if (command2 != null) { // Command already exists, just return it return (command2); } // Create a tag String tagname = "tag" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateTagRequest xmlns='urn:zimbraMail'>" + "<tag name='" + tagname + "' color='1' />" + "</CreateTagRequest>"); TagItem tag = TagItem.importFromSOAP(ZimbraAccount.AccountZWC(), tagname); ZAssert.assertNotNull(tag, "Verify the tag was created"); // Create a subfolder String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateFolderRequest xmlns='urn:zimbraMail'>" + "<folder name='" + foldername + "' l='1' view='contact'/>" + "</CreateFolderRequest>"); FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountZWC(), foldername); ZAssert.assertNotNull(folder, "Verify the subfolder is available"); // Create the list of actions ArrayList<QuickCommandAction> actions = new ArrayList<QuickCommandAction>(); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionTag, tag.getId(), true)); actions.add( new QuickCommandAction(QuickCommandAction.TypeId.actionFileInto, folder.getId(), true)); String name = "name" + ZimbraSeleniumProperties.getUniqueString(); String description = "description" + ZimbraSeleniumProperties.getUniqueString(); command2 = new QuickCommand(name, description, ItemTypeId.CONTACT, true); command2.addActions(actions); return (command2); } /** * Quick Command: Item Type: Appointment Action 1: Tag Action 2: Mark Read Action 3: Mark Flagged * Action 4: Move To Subfolder * * @throws HarnessException */ protected QuickCommand getQuickCommand03() throws HarnessException { if (command3 != null) { // Command already exists, just return it return (command3); } // Create a tag String tagname = "tag" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateTagRequest xmlns='urn:zimbraMail'>" + "<tag name='" + tagname + "' color='1' />" + "</CreateTagRequest>"); TagItem tag = TagItem.importFromSOAP(ZimbraAccount.AccountZWC(), tagname); ZAssert.assertNotNull(tag, "Verify the tag was created"); // Create a subfolder String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString(); ZimbraAccount.AccountZWC() .soapSend( "<CreateFolderRequest xmlns='urn:zimbraMail'>" + "<folder name='" + foldername + "' l='1' view='appointment'/>" + "</CreateFolderRequest>"); FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountZWC(), foldername); ZAssert.assertNotNull(folder, "Verify the subfolder is available"); // Create the list of actions ArrayList<QuickCommandAction> actions = new ArrayList<QuickCommandAction>(); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionTag, tag.getId(), true)); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "read", true)); actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "flagged", true)); actions.add( new QuickCommandAction(QuickCommandAction.TypeId.actionFileInto, folder.getId(), true)); String name = "name" + ZimbraSeleniumProperties.getUniqueString(); String description = "description" + ZimbraSeleniumProperties.getUniqueString(); command3 = new QuickCommand(name, description, ItemTypeId.APPT, true); command3.addActions(actions); return (command3); } /** * Set up basic quick commands for all combinations * * @throws HarnessException */ @Bugs(ids = "71389") // Hold off on GUI implementation of Quick Commands in 8.X // @BeforeClass( groups = { "always" } ) public void addQuickCommands() throws HarnessException { logger.info("addQuickCommands: start"); // Create a quick command in the user preferences ZimbraAccount.AccountZWC() .soapSend( "<ModifyPrefsRequest xmlns='urn:zimbraAccount'>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand01().toString() + "</pref>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand02().toString() + "</pref>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand03().toString() + "</pref>" + "</ModifyPrefsRequest>"); // Re-login to pick up the new preferences super.startingPage.zRefresh(); // The AjaxCommonTest.commonTestBeforeMethod() method will log into the client logger.info("addQuickCommands: finish"); } }
/** * This class represents a mail message * * @author Matt Rhoades */ public class TaskItem implements IItem { protected static Logger logger = LogManager.getLogger(IItem.class); // // // START: GUI Data // // public boolean gIsChecked; public String gTags; // TODO: how to represent the icon? public String gPriority; // TODO: how to represent the icon? public boolean gHasAttachments; public String gSubject; public String gStatus; public String gPercentComplete; public String gDueDate; public String gtaskBody; public String gtaskHtmlBody; // // // FINISH: GUI Data // // /** Create a mail item */ public TaskItem() { populateTaskData(); } public void setName(String name) { gSubject = name; } public String getName() { return (gSubject); } public String gettaskBody() { return gtaskBody; } public void settaskBody(String taskBody) { gtaskBody = taskBody; } public String getHtmlTaskBody() { return gtaskHtmlBody; } public void setHtmlTaskBody(String taskHtmlBody) { gtaskHtmlBody = taskHtmlBody; } public void populateTaskData() { // TODO Auto-generated method stub // taskSubject = "subject" + ZimbraSeleniumProperties.getUniqueString(); // taskBody = "Body" + ZimbraSeleniumProperties.getUniqueString(); } public String myId; public String getId() { return (myId); } public void setId(String id) { myId = id; } public static TaskItem importFromSOAP(Element GetMsgResponse) throws HarnessException { if (GetMsgResponse == null) throw new HarnessException("Element cannot be null"); TaskItem task = null; try { // Make sure we only have the GetMsgResponse part Element getMsgResponse = ZimbraAccount.SoapClient.selectNode(GetMsgResponse, "//mail:GetMsgResponse"); if (getMsgResponse == null) throw new HarnessException("Element does not contain GetMsgResponse"); Element m = ZimbraAccount.SoapClient.selectNode(getMsgResponse, "//mail:comp"); if (m == null) throw new HarnessException("Element does not contain an m element"); // Create the object task = new TaskItem(); // Set task body task.settaskBody(m.getAttribute("desc", null)); // Set task name task.setName(m.getAttribute("name", null)); // Set task id task.setId(m.getAttribute("calItemId", null)); task.setHtmlTaskBody(m.getAttribute("descHtml", null)); // TODO: parse the <m/> element return (task); } catch (Exception e) { throw new HarnessException( "Could not parse GetMsgResponse: " + GetMsgResponse.prettyPrint(), e); } finally { if (task != null) logger.info(task.prettyPrint()); } } public static TaskItem importFromSOAP(ZimbraAccount account, String query) throws HarnessException { try { account.soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='task' >" + "<query>" + query + "</query>" + "</SearchRequest>"); Element[] results = account.soapSelectNodes("//mail:SearchResponse/mail:task"); if (results.length != 1) throw new HarnessException("Query should return 1 result, not " + results.length); String invId = account.soapSelectValue("//mail:SearchResponse/mail:task", "invId"); account.soapSend( "<GetMsgRequest xmlns='urn:zimbraMail'>" + "<m id='" + invId + "' />" + "</GetMsgRequest>"); Element getMsgResponse = account.soapSelectNode("//mail:GetMsgResponse", 1); // Using the response, create this item return (importFromSOAP(getMsgResponse)); } catch (Exception e) { throw new HarnessException( "Unable to import using SOAP query(" + query + ") and account(" + account.EmailAddress + ")", e); } } public void createUsingSOAP(ZimbraAccount account) throws HarnessException { throw new HarnessException("implement me!"); } @Override public String prettyPrint() { StringBuilder sb = new StringBuilder(); sb.append(TaskItem.class.getSimpleName()).append('\n'); sb.append("Checked: ").append(gIsChecked).append('\n'); sb.append("Tags: ").append(gTags).append('\n'); sb.append("Priority: ").append(gPriority).append('\n'); sb.append("Attachments: ").append(gHasAttachments).append('\n'); sb.append("Subject: ").append(gSubject).append('\n'); sb.append("Status: ").append(gStatus).append('\n'); sb.append("% Complete: ").append(gPercentComplete).append('\n'); sb.append("Due Date: ").append(gDueDate).append('\n'); return (sb.toString()); } }
public class AppointmentItem implements IItem { protected static Logger logger = LogManager.getLogger(IItem.class); // Data values (SOAP) public String dApptID = null; protected String dSubject = null; protected String dFragment = null; protected String dOrganizer = null; protected String dAttendees = null; protected String dOptionals = null; protected String dLocation = null; protected String dEquipment = null; protected ZDate dStartTime = null; protected ZDate dEndTime = null; protected String dAllDay = null; protected String dDisplay = null; protected String dFolder = null; protected String dPrivate = null; protected String dRepeat = null; protected String dReminder = null; protected String dContent = null; protected boolean dIsChecked = false; protected boolean dIsTagged = false; protected String dRecurring = null; protected boolean dIsAllDay = false; protected boolean dIsPrivate = false; protected boolean dHasAttachments = false; protected Element dMultipart = null; // GUI values protected String gSubject = null; protected String gFragment = null; protected String gOrganizer = null; protected String gAttendees = null; protected String gOptionals = null; protected String gLocation = null; protected String gEquipment = null; protected String gStartDate = null; protected ZDate gStartTime = null; protected String gEndDate = null; protected ZDate gEndTime = null; protected String gDisplay = null; protected String gFolder = null; protected String gRepeat = null; protected String gReminder = null; protected String gContent = null; protected boolean gIsChecked = false; protected boolean gIsTagged = false; protected boolean gIsRecurring = false; protected boolean gIsAllDay = false; protected boolean gIsPrivate = false; protected boolean gHasAttachments = false; protected String gStatus = null; protected String TheLocator = null; protected String dAttendeeName = null; public AppointmentItem() {} @Override public String getName() { return (getSubject()); } public String getLocator() { return (TheLocator); } public void setLocator(String locator) { TheLocator = locator; } public static AppointmentItem importFromSOAP(Element GetAppointmentResponse) throws HarnessException { if (GetAppointmentResponse == null) throw new HarnessException("Element cannot be null"); AppointmentItem appt = null; try { // Make sure we only have the GetMsgResponse part Element getAppointmentResponse = ZimbraAccount.SoapClient.selectNode( GetAppointmentResponse, "//mail:GetAppointmentResponse"); if (getAppointmentResponse == null) throw new HarnessException("Element does not contain GetAppointmentResponse"); Element m = ZimbraAccount.SoapClient.selectNode(getAppointmentResponse, "//mail:appt"); if (m == null) throw new HarnessException("Element does not contain an appt element"); // Create the object appt = new AppointmentItem(); if (m != null) { // Appointment id appt.dApptID = m.getAttribute("id"); } String parentFolder = m.getAttribute("l"); if (parentFolder != null) { // Parent folder appt.dFolder = parentFolder; } Element sElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:s"); if (sElement != null) { // Start time appt.dStartTime = new ZDate(sElement); } Element eElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:e"); if (eElement != null) { // End time appt.dEndTime = new ZDate(eElement); } Element compElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:comp"); if (compElement != null) { // Subject appt.dSubject = compElement.getAttribute("name"); // Location appt.dLocation = compElement.getAttribute("loc"); // Display appt.dDisplay = compElement.getAttribute("fb"); } Element oElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:or"); if (oElement != null) { // Organizer appt.dOrganizer = oElement.getAttribute("a"); } Element mpElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:mp"); if (mpElement != null) { // Get multipart appt.dMultipart = mpElement; } // Parse the required attendees ArrayList<String> attendees = new ArrayList<String>(); Element[] requiredElements = ZimbraAccount.SoapClient.selectNodes(m, "//mail:at[@role='REQ']"); for (Element e : requiredElements) { attendees.add(e.getAttribute("a")); } if (attendees.size() > 0) { appt.dAttendees = AppointmentItem.StringListToCommaSeparated(attendees); } // Parse the optional attendees ArrayList<String> optionals = new ArrayList<String>(); Element[] optionalElements = ZimbraAccount.SoapClient.selectNodes(m, "//mail:at[@role='OPT']"); for (Element e : optionalElements) { optionals.add(e.getAttribute("a")); } if (optionals.size() > 0) { appt.dOptionals = AppointmentItem.StringListToCommaSeparated(optionals); } if (appt.dLocation == "") { Element equipElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:at[@cutype='RES']"); if (equipElement != null) { // Equipment appt.dEquipment = equipElement.getAttribute("a"); } } else if (appt.dLocation != null) { Element equipElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:at[@cutype='RES'][2]"); if (equipElement != null) { // Equipment appt.dEquipment = equipElement.getAttribute("a"); } } Element descElement = ZimbraAccount.SoapClient.selectNode(m, "//mail:fr"); if (descElement != null) { // Body appt.dContent = descElement.getTextTrim(); } return (appt); } catch (Exception e) { throw new HarnessException( "Could not parse GetMsgResponse: " + GetAppointmentResponse.prettyPrint(), e); } finally { if (appt != null) logger.info(appt.prettyPrint()); } } /** * Get an AppointmentItem using start/end +/- 31 days * * @param account * @param query * @return * @throws HarnessException */ public static AppointmentItem importFromSOAP(ZimbraAccount account, String query) throws HarnessException { Calendar now = Calendar.getInstance(); ZDate date = new ZDate( now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), 12, 0, 0); return (importFromSOAP(account, query, date.addDays(-31), date.addDays(31))); } /** * Get an AppointmentItem using soap * * @param account * @param query * @param start * @param end * @return * @throws HarnessException */ public static AppointmentItem importFromSOAP( ZimbraAccount account, String query, ZDate start, ZDate end) throws HarnessException { try { account.soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='appointment' calExpandInstStart='" + start.toMillis() + "' calExpandInstEnd='" + end.toMillis() + "'>" + "<query>" + query + "</query>" + "</SearchRequest>"); Element[] results = account.soapSelectNodes("//mail:SearchResponse/mail:appt"); if (results.length != 1) // throw new HarnessException("Query should return 1 result, not "+ results.length); return null; String id = account.soapSelectValue("//mail:appt", "id"); account.soapSend( "<GetAppointmentRequest xmlns='urn:zimbraMail' id='" + id + "' includeContent='1'>" + "</GetAppointmentRequest>"); Element getAppointmentResponse = account.soapSelectNode("//mail:GetAppointmentResponse", 1); // Using the response, create this item return (importFromSOAP(getAppointmentResponse)); } catch (Exception e) { throw new HarnessException( "Unable to import using SOAP query(" + query + ") and account(" + account.EmailAddress + ")", e); } } @Override public void createUsingSOAP(ZimbraAccount account) throws HarnessException { // TODO Auto-generated method stub } @Override public String prettyPrint() { StringBuilder sb = new StringBuilder(); sb.append(MailItem.class.getSimpleName()).append('\n'); sb.append('\n').append(prettyPrintSOAP()); sb.append('\n').append(prettyPrintGUI()); return (sb.toString()); } public String prettyPrintSOAP() { StringBuilder sb = new StringBuilder(); sb.append("SOAP Data:\n"); sb.append("ID: ").append(dApptID).append('\n'); sb.append("Subject: ").append(dSubject).append('\n'); sb.append("Fragment: ").append(dFragment).append('\n'); sb.append("Attendees: ").append(dAttendees).append('\n'); sb.append("Optional: ").append(dOptionals).append('\n'); sb.append("Location: ").append(dLocation).append('\n'); sb.append("Equipment: ").append(dEquipment).append('\n'); sb.append("Start Time: ").append(dStartTime).append('\n'); sb.append("End Time: ").append(dEndTime).append('\n'); sb.append("Display: ").append(dDisplay).append('\n'); sb.append("Calendar: ").append(dFolder).append('\n'); sb.append("Repeat: ").append(dRepeat).append('\n'); sb.append("Reminder: ").append(dReminder).append('\n'); sb.append("Content: ").append(dContent).append('\n'); sb.append("Is Allday: ").append(dIsAllDay).append('\n'); sb.append("Is Private: ").append(dIsPrivate).append('\n'); sb.append("Is Tagged: ").append(dIsTagged).append('\n'); sb.append("Is Recurring: ").append(dRecurring).append('\n'); sb.append("Has Attachments: ").append(dHasAttachments).append('\n'); sb.append("Multipart: ").append(dMultipart).append('\n'); return (sb.toString()); } public String prettyPrintGUI() { StringBuilder sb = new StringBuilder(); sb.append("GUI Data:\n"); sb.append("Subject: ").append(gSubject).append('\n'); sb.append("Fragment: ").append(gFragment).append('\n'); sb.append("Attendees: ").append(gAttendees).append('\n'); sb.append("Optional: ").append(gOptionals).append('\n'); sb.append("Location: ").append(gLocation).append('\n'); sb.append("Equipment: ").append(gEquipment).append('\n'); sb.append("Start Time: ").append(gStartTime).append('\n'); sb.append("End Time: ").append(gEndTime).append('\n'); sb.append("Display: ").append(gDisplay).append('\n'); sb.append("Calendar: ").append(gFolder).append('\n'); sb.append("Repeat: ").append(gRepeat).append('\n'); sb.append("Reminder: ").append(gReminder).append('\n'); sb.append("Content: ").append(gContent).append('\n'); sb.append("Is Allday: ").append(gIsAllDay).append('\n'); sb.append("Is Private: ").append(gIsPrivate).append('\n'); sb.append("Is Tagged: ").append(gIsTagged).append('\n'); sb.append("Is Recurring: ").append(gIsRecurring).append('\n'); sb.append("Has Attachments: ").append(gHasAttachments).append('\n'); sb.append("Multipart: ").append(dMultipart).append('\n'); return (sb.toString()); } // --------------------- SOAP ----------------------------------- public String getSubject() { return (dSubject); } public void setSubject(String subject) { dSubject = subject; } public String getFragment() { return (dFragment); } public void setFragment(String subject) { dFragment = subject; } public String getOrganizer() { return (dOrganizer); } public String getAttendees() { return (dAttendees); } public void setAttendees(String attendees) { dAttendees = attendees; } public String getOptional() { return (dOptionals); } public void setOptional(String optional) { dOptionals = optional; } public String getLocation() { return (dLocation); } public void setLocation(String location) { dLocation = location; } public String getEquipment() { return (dEquipment); } public void setEquipment(String equipment) { dEquipment = equipment; } public String getContent() { return (dContent); } public void setContent(String content) { dContent = content; } public ZDate getStartTime() { return (dStartTime); } public void setStartTime(ZDate date) { dStartTime = date; } public ZDate getEndTime() { return (dEndTime); } public void setEndTime(ZDate date) { dEndTime = date; } public String getDisplay() { return (dDisplay); } public void setDisplay(String display) { dDisplay = display; } public void setFolder(String id) { dFolder = id; } public String getReminder() { return (dReminder); } public void setReminder(String reminder) { dReminder = reminder; } public boolean getIsAllDay() { return (dIsAllDay); } public boolean setIsAllDay(boolean isAllDay) { dIsAllDay = true; return (dIsAllDay); } public String getRecurring() { return (dRecurring); } public String setRecurring(String recurringType, String endBy) { dRecurring = recurringType + "," + endBy; return dRecurring; } public String setRecurring(String recurringType, int noOfOccurrences) { dRecurring = recurringType + "," + noOfOccurrences; return dRecurring; } public boolean getIsPrivate() { return (dIsPrivate); } public boolean setIsPrivate(boolean isPrivate) { dIsPrivate = true; return (dIsPrivate); } public boolean getIsChecked() { return (dIsChecked); } public boolean setIsChecked() { return (dIsChecked); } public boolean getIsTagged() { return (dIsTagged); } public boolean setIsTagged() { return (dIsTagged); } public boolean getHasAttachments() { return (dHasAttachments); } public boolean setHasAttachments() { return (dHasAttachments); } // --------------------- GUI ----------------------------------- public String getGSubject() { return (gSubject); } public void setGSubject(String subject) { gSubject = subject; } public String getGFragment() { return (gFragment); } public void setGFragment(String subject) { gFragment = subject; } public String getGAttendees() { return (gAttendees); } public void setGAttendees(String attendees) { gAttendees = attendees; } public String getGOptional() { return (gOptionals); } public void setGOptional(String optional) { gOptionals = optional; } public String getGLocation() { return (gLocation); } public void setGLocation(String location) { gLocation = location; } public String getGEquipment() { return (gEquipment); } public void setGEquipment(String equipment) { gEquipment = equipment; } public String getGContent() { return (gContent); } public void setGContent(String content) { gContent = content; } public String getGStartDate() { return (gStartDate); } public void setGStartDate(String string) { gStartDate = string; } public String getGEndDate() { return (gEndDate); } public void setGEndDate(String string) { gEndDate = string; } public ZDate getGStartTime() { return (gStartTime); } public void setGStartTime(ZDate date) { gStartTime = date; } public ZDate getGEndTime() { return (gEndTime); } public void setGEndTime(ZDate date) { gEndTime = date; } public String getGDisplay() { return (gDisplay); } public void setGDisplay(String display) { gDisplay = display; } public String getGFolder() { return (gFolder); } public void setGFolder(String folder) { gFolder = folder; } public String getGReminder() { return (gReminder); } public void setGReminder(String reminder) { gReminder = reminder; } public boolean getGIsAllDay() { return (gIsAllDay); } public boolean setGIsAllDay() { return (gIsAllDay); } public boolean getGIsRecurring() { return (gIsRecurring); } public boolean setGIsRecurring(boolean b) { return (gIsRecurring); } public boolean getGIsPrivate() { return (gIsPrivate); } public boolean setGIsPrivate() { return (gIsPrivate); } public boolean getGIsChecked() { return (gIsChecked); } public boolean setGIsChecked(boolean b) { return (gIsChecked); } public boolean getGIsTagged() { return (gIsTagged); } public boolean setGIsTagged() { return (gIsTagged); } public boolean getGHasAttachments() { return (gHasAttachments); } public boolean setGHasAttachments(boolean b) { return (gHasAttachments); } public String getFolder() { return (dFolder); } public boolean getGHasAttachment() { return (gHasAttachments); } public void setGIsTagged(boolean tagged) { gIsTagged = tagged; } public void setGHasAttachment(boolean hasAttachment) { gHasAttachments = hasAttachment; } public void setGIsAllDay(boolean allDay) { gIsAllDay = allDay; } public void setGStatus(String status) { gStatus = status; } public String getGStatus() { return (gStatus); } public void setGAttachmentId(Element AttachmentId) { dMultipart = AttachmentId; } public Element getGMultipart() { return (dMultipart); } public String getAttendeeName() { return (dAttendeeName); } public void setAttendeeName(String AttendeeName) { dAttendeeName = AttendeeName; } /** * Create a single-day appointment on the server * * @param account Appointment Organizer * @param start Start time of the appointment, which will be rounded to the nearest hour * @param duration Duration of the appointment, in minutes * @param timezone Timezone of the appointment (null if default) * @param subject Subject of the appointment * @param content Content of the appointment (text) * @param location Location of the appointment (null if none) * @param attendees List of attendees for the appointment * @return * @throws HarnessException */ public static AppointmentItem createAppointmentSingleDay( ZimbraAccount account, Calendar start, int duration, TimeZone tz, String subject, String content, String location, List<ZimbraAccount> attendees) throws HarnessException { // If location is null, don't specify the loc attribute String loc = (location == null ? "" : "loc='" + location + "'"); // TODO: determine the timezone String timezoneString = ZTimeZone.TimeZoneEST.getID(); // Convert the calendar to a ZDate ZDate beginning = new ZDate( start.get(Calendar.YEAR), start.get(Calendar.MONTH) + 1, start.get(Calendar.DAY_OF_MONTH), start.get(Calendar.HOUR_OF_DAY), 0, 0); ZDate ending = beginning.addMinutes(duration); account.soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m l='10'>" + "<inv>" + "<comp name='" + subject + "' " + loc + " draft='0' status='CONF' class='PUB' transp='O' fb='B'>" + "<s d='" + beginning.toTimeZone(timezoneString).toYYYYMMDDTHHMMSS() + "' tz='" + timezoneString + "'/>" + "<e d='" + ending.toTimeZone(timezoneString).toYYYYMMDDTHHMMSS() + "' tz='" + timezoneString + "'/>" + "<or a='" + account.EmailAddress + "'/>" + "</comp>" + "</inv>" + "<su>" + subject + "</su>" + "<mp ct='text/plain'>" + "<content>" + content + "</content>" + "</mp>" + "</m>" + "</CreateAppointmentRequest>"); AppointmentItem result = AppointmentItem.importFromSOAP( account, "subject:(" + subject + ")", beginning.addDays(-7), beginning.addDays(7)); return (result); } /** * Create an all-day appointment on the server * * @param account The appointment organizer * @param date The appointment start date * @param duration The appointment duration (in days) * @param subject The appointment subject * @param content The appointment text content * @param location The appointment location (null if none) * @param attendees A list of attendees (null for none) * @return * @throws HarnessException */ public static AppointmentItem createAppointmentAllDay( ZimbraAccount account, Calendar date, int duration, String subject, String content, String location, List<ZimbraAccount> attendees) throws HarnessException { // If location is null, don't specify the loc attribute String loc = (location == null ? "" : "loc='" + location + "'"); // Convert the calendar to a ZDate ZDate start = new ZDate( date.get(Calendar.YEAR), date.get(Calendar.MONTH) + 1, date.get(Calendar.DAY_OF_MONTH), 12, 0, 0); account.soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m l='10'>" + "<inv>" + "<comp allDay='1' name='" + subject + "' " + loc + " draft='0' status='CONF' class='PUB' transp='O' fb='F'>" + "<s d='" + start.toYYYYMMDD() + "'/>" + "<e d='" + start.addDays(duration > 0 ? duration - 1 : 0).toYYYYMMDD() + "'/>" + "<or a='" + account.EmailAddress + "'/>" + "</comp>" + "</inv>" + "<su>" + subject + "</su>" + "<mp ct='text/plain'>" + "<content>" + content + "</content>" + "</mp>" + "</m>" + "</CreateAppointmentRequest>"); AppointmentItem result = AppointmentItem.importFromSOAP( account, "subject:(" + subject + ")", start.addDays(-7), start.addDays(7)); return (result); } private static String StringListToCommaSeparated(List<String> strings) { StringBuilder sb = new StringBuilder(""); String delimiter = ""; // First entry does not get a comma for (String s : strings) { sb.append(delimiter).append(s); delimiter = ","; // Next entry, if any, will get a comma } return (sb.toString()); } }