All Downloads are FREE. Search and download functionalities are using the official Maven repository.

microsoft.exchange.webservices.data.property.complex.FolderPermission Maven / Gradle / Ivy

/*
 * The MIT License
 * Copyright (c) 2012 Microsoft Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package microsoft.exchange.webservices.data.property.complex;

import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
import microsoft.exchange.webservices.data.core.EwsUtilities;
import microsoft.exchange.webservices.data.core.ILazyMember;
import microsoft.exchange.webservices.data.core.LazyMember;
import microsoft.exchange.webservices.data.core.XmlElementNames;
import microsoft.exchange.webservices.data.core.enumeration.permission.folder.FolderPermissionLevel;
import microsoft.exchange.webservices.data.core.enumeration.permission.folder.FolderPermissionReadAccess;
import microsoft.exchange.webservices.data.core.enumeration.permission.PermissionScope;
import microsoft.exchange.webservices.data.core.enumeration.property.StandardUser;
import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
import microsoft.exchange.webservices.data.core.exception.service.local.ServiceValidationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 * Represents a permission on a folder.
 */
public final class FolderPermission extends ComplexProperty implements IComplexPropertyChangedDelegate {

  private static final Log LOG = LogFactory.getLog(FolderPermission.class);

  private static LazyMember>
      defaultPermissions =
      new LazyMember>(
          new ILazyMember>() {
            @Override
            public Map
            createInstance() {
              Map result =
                  new HashMap();

              /** The default permissions. */
              FolderPermission permission = new FolderPermission();
              permission.canCreateItems = false;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.None;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = false;
              permission.readItems = FolderPermissionReadAccess.None;

              result.put(FolderPermissionLevel.None, permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.None;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.None;

              result.put(FolderPermissionLevel.Contributor, permission);

              permission = new FolderPermission();
              permission.canCreateItems = false;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.None;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.Reviewer, permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.Owned;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.NoneditingAuthor,
                  permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.Owned;
              permission.editItems = PermissionScope.Owned;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.Author, permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = true;
              permission.deleteItems = PermissionScope.Owned;
              permission.editItems = PermissionScope.Owned;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.PublishingAuthor,
                  permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.All;
              permission.editItems = PermissionScope.All;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.Editor, permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = true;
              permission.deleteItems = PermissionScope.All;
              permission.editItems = PermissionScope.All;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.PublishingEditor,
                  permission);

              permission = new FolderPermission();
              permission.canCreateItems = true;
              permission.canCreateSubFolders = true;
              permission.deleteItems = PermissionScope.All;
              permission.editItems = PermissionScope.All;
              permission.isFolderContact = true;
              permission.isFolderOwner = true;
              permission.isFolderVisible = true;
              permission.readItems = FolderPermissionReadAccess.
                  FullDetails;

              result.put(FolderPermissionLevel.Owner, permission);

              permission = new FolderPermission();
              permission.canCreateItems = false;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.None;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = false;
              permission.readItems = FolderPermissionReadAccess.TimeOnly;

              result.put(FolderPermissionLevel.FreeBusyTimeOnly,
                  permission);

              permission = new FolderPermission();
              permission.canCreateItems = false;
              permission.canCreateSubFolders = false;
              permission.deleteItems = PermissionScope.None;
              permission.editItems = PermissionScope.None;
              permission.isFolderContact = false;
              permission.isFolderOwner = false;
              permission.isFolderVisible = false;
              permission.readItems = FolderPermissionReadAccess.
                  TimeAndSubjectAndLocation;

              result
                  .put(FolderPermissionLevel.
                          FreeBusyTimeAndSubjectAndLocation,
                      permission);
              return result;
            }
          });
  //End Region

  /**
   * Variants of pre-defined permission levels that Outlook also displays with
   * the same levels.
   */
  private static LazyMember> levelVariants =
      new LazyMember>(
          new ILazyMember>() {
            @Override
            public List createInstance() {
              List results =
                  new ArrayList();

              FolderPermission permissionNone = FolderPermission.
                  defaultPermissions
                  .getMember().get(FolderPermissionLevel.None);
              FolderPermission permissionOwner = FolderPermission.
                  defaultPermissions
                  .getMember().get(FolderPermissionLevel.Owner);

              // PermissionLevelNoneOption1
              FolderPermission permission;
              try {
                permission = (FolderPermission) permissionNone.clone();
                permission.isFolderVisible = true;
                results.add(permission);

                // PermissionLevelNoneOption2
                permission = (FolderPermission) permissionNone.clone();
                permission.isFolderContact = true;
                results.add(permission);

                // PermissionLevelNoneOption3
                permission = (FolderPermission) permissionNone.clone();
                permission.isFolderContact = true;
                permission.isFolderVisible = true;
                results.add(permission);

                // PermissionLevelOwnerOption1
                permission = (FolderPermission) permissionOwner.clone();
                permission.isFolderContact = false;
                results.add(permission);

              } catch (CloneNotSupportedException e) {
                LOG.error(e);
              }
              return results;
            }
          });

  /**
   * The user id.
   */
  private UserId userId;

  /**
   * The can create item.
   */
  private boolean canCreateItems;

  /**
   * The can create sub folder.
   */
  private boolean canCreateSubFolders;

  /**
   * The is folder owner.
   */
  private boolean isFolderOwner;

  /**
   * The is folder visible.
   */
  private boolean isFolderVisible;

  /**
   * The is folder contact.
   */
  private boolean isFolderContact;

  /**
   * The edit item.
   */
  private PermissionScope editItems = PermissionScope.None;

  /**
   * The delete item.
   */
  private PermissionScope deleteItems = PermissionScope.None;

  /**
   * The read item.
   */
  private FolderPermissionReadAccess readItems = FolderPermissionReadAccess.None;

  /**
   * The permission level.
   */
  private FolderPermissionLevel permissionLevel = FolderPermissionLevel.None;

  /**
   * Determines whether the specified folder permission is the same as this
   * one. The comparison does not take UserId and PermissionLevel into
   * consideration.
   *
   * @param permission the permission
   * @return True is the specified folder permission is equal to this one,
   * false otherwise.
   */
  private boolean isEqualTo(FolderPermission permission) {

    return this.canCreateItems == permission.canCreateItems &&
        this.canCreateSubFolders == permission.canCreateSubFolders &&
        this.isFolderContact == permission.isFolderContact &&
        this.isFolderVisible == permission.isFolderVisible &&
        this.isFolderOwner == permission.isFolderOwner &&
        this.editItems == permission.editItems &&
        this.deleteItems == permission.deleteItems &&
        this.readItems == permission.readItems;
  }

  /**
   * Create a copy of this FolderPermission instance.
   *
   * @return Clone of this instance.
   */
        /*
	 * private FolderPermission Clone() throws CloneNotSupportedException {
	 * return (FolderPermission)this.clone(); }
	 */

  /**
   * Determines the permission level of this folder permission based on its
   * individual settings, and sets the PermissionLevel property accordingly.
   */
  private void AdjustPermissionLevel() {
    for (Entry keyValuePair : defaultPermissions
        .getMember().entrySet()) {
      if (this.isEqualTo(keyValuePair.getValue())) {
        this.permissionLevel = keyValuePair.getKey();
        return;
      }
    }
    this.permissionLevel = FolderPermissionLevel.Custom;
  }

  /**
   * Copies the values of the individual permissions of the specified folder
   * permission to this folder permissions.
   *
   * @param permission the permission
   */
  private void AssignIndividualPermissions(FolderPermission permission) {
    this.canCreateItems = permission.canCreateItems;
    this.canCreateSubFolders = permission.canCreateSubFolders;
    this.isFolderContact = permission.isFolderContact;
    this.isFolderOwner = permission.isFolderOwner;
    this.isFolderVisible = permission.isFolderVisible;
    this.editItems = permission.editItems;
    this.deleteItems = permission.deleteItems;
    this.readItems = permission.readItems;
  }

  /**
   * Initializes a new instance of the FolderPermission class.
   */
  public FolderPermission() {
    super();
    this.userId = new UserId();
  }

  /**
   * Initializes a new instance of the FolderPermission class.
   *
   * @param userId          the user id
   * @param permissionLevel the permission level
   * @throws Exception the exception
   */
  public FolderPermission(UserId userId,
      FolderPermissionLevel permissionLevel)
      throws Exception {
    EwsUtilities.validateParam(userId, "userId");

    this.userId = userId;
    this.permissionLevel = permissionLevel;
  }

  /**
   * Initializes a new instance of the FolderPermission class.
   *
   * @param primarySmtpAddress the primary smtp address
   * @param permissionLevel    the permission level
   */
  public FolderPermission(String primarySmtpAddress,
      FolderPermissionLevel permissionLevel) {
    this.userId = new UserId(primarySmtpAddress);
    this.permissionLevel = permissionLevel;
  }

  /**
   * Initializes a new instance of the FolderPermission class.
   *
   * @param standardUser    the standard user
   * @param permissionLevel the permission level
   */
  public FolderPermission(StandardUser standardUser,
      FolderPermissionLevel permissionLevel) {
    this.userId = new UserId(standardUser);
    this.permissionLevel = permissionLevel;
  }

  /**
   * Validates this instance.
   *
   * @param isCalendarFolder the is calendar folder
   * @param permissionIndex  the permission index
   * @throws ServiceValidationException the service validation exception
   * @throws ServiceLocalException      the service local exception
   */
  void validate(boolean isCalendarFolder, int permissionIndex)
      throws ServiceValidationException, ServiceLocalException {
    // Check UserId
    if (!this.userId.isValid()) {
      throw new ServiceValidationException(String.format(
          "The UserId in the folder permission at index %d is invalid. "
          + "The StandardUser, PrimarySmtpAddress, or SID property must be set.", permissionIndex));
    }

    // If this permission is to be used for a non-calendar folder make sure
    // that read access and permission level aren't set to Calendar-only
    // values
    if (!isCalendarFolder) {
      if ((this.readItems == FolderPermissionReadAccess.TimeAndSubjectAndLocation)
          || (this.readItems == FolderPermissionReadAccess.
          TimeOnly)) {
        throw new ServiceLocalException(String.format(
            "Permission read access value %s cannot be used with non-calendar folder.",
            this.readItems));
      }

      if ((this.permissionLevel == FolderPermissionLevel.FreeBusyTimeAndSubjectAndLocation)
          || (this.permissionLevel == FolderPermissionLevel.
          FreeBusyTimeOnly)) {
        throw new ServiceLocalException(String.format(
            "Permission level value %s cannot be used with non-calendar folder.",
            this.permissionLevel));
      }
    }
  }

  /**
   * Gets the Id of the user the permission applies to.
   *
   * @return the user id
   */

  public UserId getUserId() {
    return this.userId;
  }

  /**
   * Sets the user id.
   *
   * @param value the new user id
   */
  public void setUserId(UserId value) {
    if (this.userId != null) {
      this.userId.removeChangeEvent(this);
    }

    if (this.canSetFieldValue(this.userId, value)) {
      userId = value;
      this.changed();
    }
    if (this.userId != null) {
      this.userId.addOnChangeEvent(this);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * microsoft.exchange.webservices.ComplexPropertyChangedDelegateInterface
   * #complexPropertyChanged(microsoft.exchange.webservices.ComplexProperty)
   */
  @Override
  public void complexPropertyChanged(ComplexProperty complexProperty) {
    this.propertyChanged(complexProperty);
  }

  /**
   * Property was changed.
   *
   * @param complexProperty the complex property
   */
  private void propertyChanged(ComplexProperty complexProperty) {
    this.changed();
  }

  /**
   * Gets  a value indicating whether the user can create new item.
   *
   * @return the can create item
   */
  public boolean getCanCreateItems() {
    return this.canCreateItems;
  }

  /**
   * Sets the can create item.
   *
   * @param value the new can create item
   */
  public void setCanCreateItems(boolean value) {
    if (this.canSetFieldValue(this.canCreateItems, value)) {
      this.canCreateItems = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  a value indicating whether the user can create
   * sub-folder.
   *
   * @return the can create sub folder
   */
  public boolean getCanCreateSubFolders() {
    return this.canCreateSubFolders;
  }

  /**
   * Sets the can create sub folder.
   *
   * @param value the new can create sub folder
   */
  public void setCanCreateSubFolders(boolean value) {
    if (this.canSetFieldValue(this.canCreateSubFolders, value)) {
      this.canCreateSubFolders = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets a value indicating whether the user owns the folder.
   *
   * @return the checks if is folder owner
   */
  public boolean getIsFolderOwner() {
    return this.isFolderOwner;
  }

  /**
   * Sets the checks if is folder owner.
   *
   * @param value the new checks if is folder owner
   */
  public void setIsFolderOwner(boolean value) {
    if (this.canSetFieldValue(this.isFolderOwner, value)) {
      this.isFolderOwner = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets a value indicating whether the folder is visible to the
   * user.
   *
   * @return the checks if is folder visible
   */
  public boolean getIsFolderVisible() {
    return this.isFolderVisible;
  }

  /**
   * Sets the checks if is folder visible.
   *
   * @param value the new checks if is folder visible
   */
  public void setIsFolderVisible(boolean value) {
    if (this.canSetFieldValue(this.isFolderVisible, value)) {
      this.isFolderVisible = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  a value indicating whether the user is a contact for the
   * folder.
   *
   * @return the checks if is folder contact
   */
  public boolean getIsFolderContact() {
    return this.isFolderContact;
  }

  /**
   * Sets the checks if is folder contact.
   *
   * @param value the new checks if is folder contact
   */
  public void setIsFolderContact(boolean value) {
    if (this.canSetFieldValue(this.isFolderContact, value)) {
      this.isFolderContact = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  a value indicating if/how the user can edit existing
   * item.
   *
   * @return the edits the item
   */
  public PermissionScope getEditItems() {
    return this.editItems;
  }

  /**
   * Sets the edits the item.
   *
   * @param value the new edits the item
   */
  public void setEditItems(PermissionScope value) {
    if (this.canSetFieldValue(this.editItems, value)) {
      this.editItems = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  a value indicating if/how the user can delete existing
   * item.
   *
   * @return the delete item
   */
  public PermissionScope getDeleteItems() {
    return this.deleteItems;
  }

  /**
   * Sets the delete item.
   *
   * @param value the new delete item
   */
  public void setDeleteItems(PermissionScope value) {
    if (this.canSetFieldValue(this.deleteItems, value)) {
      this.deleteItems = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  the read item access permission.
   *
   * @return the read item
   */
  public FolderPermissionReadAccess getReadItems() {
    return this.readItems;
  }

  /**
   * Sets the read item.
   *
   * @param value the new read item
   */
  public void setReadItems(FolderPermissionReadAccess value) {
    if (this.canSetFieldValue(this.readItems, value)) {
      this.readItems = value;
      this.changed();
    }
    this.AdjustPermissionLevel();
  }

  /**
   * Gets  the permission level.
   *
   * @return the permission level
   */
  public FolderPermissionLevel getPermissionLevel() {
    return this.permissionLevel;
  }

  /**
   * Sets the permission level.
   *
   * @param value the new permission level
   * @throws ServiceLocalException the service local exception
   */
  public void setPermissionLevel(FolderPermissionLevel value)
      throws ServiceLocalException {
    if (this.permissionLevel != value) {
      if (value == FolderPermissionLevel.Custom) {
        throw new ServiceLocalException(
            "The PermissionLevel property can't be set to FolderPermissionLevel.Custom. "
            + "To define a custom permission, set its individual property to the values you want.");
      }

      this.AssignIndividualPermissions(defaultPermissions.getMember()
          .get(value));
      if (this.canSetFieldValue(this.permissionLevel, value)) {
        this.permissionLevel = value;
        this.changed();
      }
    }
  }

  /**
   * Gets the permission level that Outlook would display for this folder
   * permission.
   *
   * @return the display permission level
   */
  public FolderPermissionLevel getDisplayPermissionLevel() {
    // If permission level is set to Custom, see if there's a variant
    // that Outlook would map to the same permission level.
    if (this.permissionLevel == FolderPermissionLevel.Custom) {
      for (FolderPermission variant : FolderPermission.levelVariants
          .getMember()) {
        if (this.isEqualTo(variant)) {
          return variant.getPermissionLevel();
        }
      }
    }

    return this.permissionLevel;
  }

  /**
   * Tries to read element from XML.
   *
   * @param reader the reader
   * @return True if element was read.
   * @throws Exception the exception
   */
  public boolean tryReadElementFromXml(EwsServiceXmlReader reader)
      throws Exception {
    if (reader.getLocalName().equalsIgnoreCase(XmlElementNames.UserId)) {
      this.userId = new UserId();
      this.userId.loadFromXml(reader, reader.getLocalName());
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.CanCreateItems)) {
      this.canCreateItems = reader.readValue(Boolean.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.CanCreateSubFolders)) {
      this.canCreateSubFolders = reader.readValue(Boolean.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.IsFolderOwner)) {
      this.isFolderOwner = reader.readValue(Boolean.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.IsFolderVisible)) {
      this.isFolderVisible = reader.readValue(Boolean.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.IsFolderContact)) {
      this.isFolderContact = reader.readValue(Boolean.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.EditItems)) {
      this.editItems = reader.readValue(PermissionScope.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.DeleteItems)) {
      this.deleteItems = reader.readValue(PermissionScope.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.ReadItems)) {
      this.readItems = reader.readValue(FolderPermissionReadAccess.class);
      return true;
    } else if (reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.PermissionLevel)
        || reader.getLocalName().equalsIgnoreCase(
        XmlElementNames.CalendarPermissionLevel)) {
      this.permissionLevel = reader
          .readValue(FolderPermissionLevel.class);
      return true;
    } else {
      return false;
    }
  }

  /**
   * Loads from XML.
   *
   * @param reader         the reader
   * @param xmlNamespace   the xml namespace
   * @param xmlElementName the xml element name
   * @throws Exception the exception
   */
  public void loadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName) throws Exception {
    super.loadFromXml(reader, xmlNamespace, xmlElementName);

    this.AdjustPermissionLevel();
  }

  /**
   * Writes elements to XML.
   *
   * @param writer           the writer
   * @param isCalendarFolder the is calendar folder
   * @throws Exception the exception
   */
  protected void writeElementsToXml(EwsServiceXmlWriter writer,
      boolean isCalendarFolder) throws Exception {
    if (this.userId != null) {
      this.userId.writeToXml(writer, XmlElementNames.UserId);
    }

    if (this.permissionLevel == FolderPermissionLevel.Custom) {
      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.CanCreateItems, this.canCreateItems);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.CanCreateSubFolders,
          this.canCreateSubFolders);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.IsFolderOwner, this.isFolderOwner);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.IsFolderVisible, this.isFolderVisible);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.IsFolderContact, this.isFolderContact);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.EditItems, this.editItems);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.DeleteItems, this.deleteItems);

      writer.writeElementValue(XmlNamespace.Types,
          XmlElementNames.ReadItems, this.readItems);
    }

    writer
        .writeElementValue(
            XmlNamespace.Types,
            isCalendarFolder ? XmlElementNames.
                CalendarPermissionLevel
                : XmlElementNames.PermissionLevel,
            this.permissionLevel);
  }

  /**
   * Writes to XML.
   *
   * @param writer           the writer
   * @param xmlElementName   the xml element name
   * @param isCalendarFolder the is calendar folder
   * @throws Exception the exception
   */
  protected void writeToXml(EwsServiceXmlWriter writer,
      String xmlElementName, boolean isCalendarFolder) throws Exception {
    writer.writeStartElement(this.getNamespace(), xmlElementName);
    this.writeAttributesToXml(writer);
    this.writeElementsToXml(writer, isCalendarFolder);
    writer.writeEndElement();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy