001/* 002 * The MIT License 003 * Copyright (c) 2012 Microsoft Corporation 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining a copy 006 * of this software and associated documentation files (the "Software"), to deal 007 * in the Software without restriction, including without limitation the rights 008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 009 * copies of the Software, and to permit persons to whom the Software is 010 * furnished to do so, subject to the following conditions: 011 * 012 * The above copyright notice and this permission notice shall be included in 013 * all copies or substantial portions of the Software. 014 * 015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 021 * THE SOFTWARE. 022 */ 023 024package microsoft.exchange.webservices.data.property.complex; 025 026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader; 027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 028import microsoft.exchange.webservices.data.core.EwsUtilities; 029import microsoft.exchange.webservices.data.core.XmlElementNames; 030import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 031 032/** 033 * Represents a rule that automatically handles incoming messages. 034 * A rule consists of a set of conditions 035 * and exception that determine whether or 036 * not a set of actions should be executed on incoming messages. 037 */ 038public final class Rule extends ComplexProperty { 039 040 /** 041 * The rule ID. 042 */ 043 private String ruleId; 044 045 /** 046 * The rule display name. 047 */ 048 private String displayName; 049 050 /** 051 * The rule priority. 052 */ 053 private int priority; 054 055 /** 056 * The rule status of enabled or not. 057 */ 058 private boolean isEnabled; 059 060 /** 061 * The rule status of is supported or not. 062 */ 063 private boolean isNotSupported; 064 065 /** 066 * The rule status of in error or not. 067 */ 068 private boolean isInError; 069 070 /** 071 * The rule conditions. 072 */ 073 private RulePredicates conditions; 074 075 /** 076 * The rule actions. 077 */ 078 private RuleActions actions; 079 080 /** 081 * The rule exception. 082 */ 083 private RulePredicates exceptions; 084 085 /** 086 * Initializes a new instance of the Rule class. 087 */ 088 public Rule() { 089 super(); 090 091 /** 092 * New rule has priority as 0 by default 093 */ 094 this.priority = 1; 095 096 /** 097 * New rule is enabled by default 098 */ 099 this.isEnabled = true; 100 this.conditions = new RulePredicates(); 101 this.actions = new RuleActions(); 102 this.exceptions = new RulePredicates(); 103 } 104 105 106 /** 107 * Gets or sets the Id of this rule. 108 */ 109 public String getId() { 110 111 return this.ruleId; 112 } 113 114 public void setId(String value) { 115 if (this.canSetFieldValue(this.ruleId, value)) { 116 this.ruleId = value; 117 this.changed(); 118 } 119 } 120 121 /** 122 * Gets or sets the name of this rule as it should be displayed to the user. 123 */ 124 public String getDisplayName() { 125 return this.displayName; 126 } 127 128 public void setDisplayName(String value) { 129 if (this.canSetFieldValue(this.displayName, value)) { 130 this.displayName = value; 131 this.changed(); 132 } 133 } 134 135 136 /** 137 * Gets or sets the priority of this rule, 138 * which determines its execution order. 139 */ 140 public int getPriority() { 141 return this.priority; 142 } 143 144 public void setPriority(int value) { 145 if (this.canSetFieldValue(this.priority, value)) { 146 this.priority = value; 147 this.changed(); 148 } 149 } 150 151 152 /** 153 * Gets or sets a value indicating whether this rule is enabled. 154 */ 155 public boolean getIsEnabled() { 156 return this.isEnabled; 157 } 158 159 public void setIsEnabled(boolean value) { 160 if (this.canSetFieldValue(this.isEnabled, value)) { 161 this.isEnabled = value; 162 this.changed(); 163 } 164 } 165 166 /** 167 * Gets a value indicating whether this rule can be modified via EWS. 168 * If IsNotSupported is true, the rule cannot be modified via EWS. 169 */ 170 public boolean getIsNotSupported() { 171 return this.isNotSupported; 172 173 } 174 175 /** 176 * Gets or sets a value indicating whether 177 * this rule has errors. A rule that is in error 178 * cannot be processed unless it is updated and the error is corrected. 179 */ 180 public boolean getIsInError() { 181 return this.isInError; 182 } 183 184 public void setIsInError(boolean value) { 185 if (this.canSetFieldValue(this.isInError, value)) { 186 this.isInError = value; 187 this.changed(); 188 } 189 } 190 191 /** 192 * Gets the conditions that determine whether or not this rule should be 193 * executed against incoming messages. 194 */ 195 public RulePredicates getConditions() { 196 return this.conditions; 197 } 198 199 /** 200 * Gets the actions that should be executed against incoming messages if the 201 * conditions evaluate as true. 202 */ 203 public RuleActions getActions() { 204 return this.actions; 205 206 } 207 208 /** 209 * Gets the exception that determine 210 * if this rule should be skipped even if 211 * its conditions evaluate to true. 212 */ 213 public RulePredicates getExceptions() { 214 return this.exceptions; 215 } 216 217 /** 218 * Tries to read element from XML. 219 * 220 * @param reader The reader. 221 * @return True if element was read. 222 * @throws Exception 223 */ 224 @Override 225 public boolean tryReadElementFromXml(EwsServiceXmlReader 226 reader) throws Exception { 227 228 if (reader.getLocalName().equals(XmlElementNames.DisplayName)) { 229 this.displayName = reader.readElementValue(); 230 return true; 231 } else if (reader.getLocalName().equals(XmlElementNames.RuleId)) { 232 this.ruleId = reader.readElementValue(); 233 return true; 234 } else if (reader.getLocalName().equals(XmlElementNames.Priority)) { 235 this.priority = reader.readElementValue(Integer.class); 236 return true; 237 } else if (reader.getLocalName().equals(XmlElementNames.IsEnabled)) { 238 this.isEnabled = reader.readElementValue(Boolean.class); 239 return true; 240 } else if (reader.getLocalName().equals(XmlElementNames.IsNotSupported)) { 241 this.isNotSupported = reader.readElementValue(Boolean.class); 242 return true; 243 } else if (reader.getLocalName().equals(XmlElementNames.IsInError)) { 244 this.isInError = reader.readElementValue(Boolean.class); 245 return true; 246 } else if (reader.getLocalName().equals(XmlElementNames.Conditions)) { 247 this.conditions.loadFromXml(reader, reader.getLocalName()); 248 return true; 249 } else if (reader.getLocalName().equals(XmlElementNames.Actions)) { 250 this.actions.loadFromXml(reader, reader.getLocalName()); 251 return true; 252 } else if (reader.getLocalName().equals(XmlElementNames.Exceptions)) { 253 this.exceptions.loadFromXml(reader, reader.getLocalName()); 254 return true; 255 } else { 256 return false; 257 } 258 } 259 260 /** 261 * Writes elements to XML. 262 * 263 * @param writer The writer. 264 * @throws Exception 265 */ 266 @Override 267 public void writeElementsToXml(EwsServiceXmlWriter writer) 268 throws Exception { 269 if (!(getId() == null || getId().isEmpty())) { 270 writer.writeElementValue( 271 XmlNamespace.Types, 272 XmlElementNames.RuleId, 273 this.getId()); 274 } 275 276 writer.writeElementValue( 277 XmlNamespace.Types, 278 XmlElementNames.DisplayName, 279 this.getDisplayName()); 280 writer.writeElementValue( 281 XmlNamespace.Types, 282 XmlElementNames.Priority, 283 this.getPriority()); 284 writer.writeElementValue( 285 XmlNamespace.Types, 286 XmlElementNames.IsEnabled, 287 this.getIsEnabled()); 288 writer.writeElementValue( 289 XmlNamespace.Types, 290 XmlElementNames.IsInError, 291 this.getIsInError()); 292 this.getConditions().writeToXml(writer, XmlElementNames.Conditions); 293 this.getExceptions().writeToXml(writer, XmlElementNames.Exceptions); 294 this.getActions().writeToXml(writer, XmlElementNames.Actions); 295 } 296 297 298 /** 299 * Validates this instance. 300 */ 301 @Override 302 protected void internalValidate() throws Exception { 303 super.internalValidate(); 304 EwsUtilities.validateParam(this.displayName, "DisplayName"); 305 EwsUtilities.validateParam(this.conditions, "Conditions"); 306 EwsUtilities.validateParam(this.exceptions, "Exceptions"); 307 EwsUtilities.validateParam(this.actions, "Actions"); 308 } 309} 310