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
024 package microsoft.exchange.webservices.data.property.definition;
025
026 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
027 import microsoft.exchange.webservices.data.core.XmlAttributeNames;
028 import microsoft.exchange.webservices.data.core.XmlElementNames;
029 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
030
031 /**
032 * Represents an indexed property definition.
033 */
034 public final class IndexedPropertyDefinition extends
035 ServiceObjectPropertyDefinition {
036
037 // Index attribute of IndexedFieldURI element.
038 /**
039 * The index.
040 */
041 private String index;
042
043 /**
044 * Initializes a new instance of the IndexedPropertyDefinition class.
045 *
046 * @param uri The FieldURI attribute of the IndexedFieldURI element.
047 * @param index The Index attribute of the IndexedFieldURI element.
048 */
049 public IndexedPropertyDefinition(String uri, String index) {
050 super(uri);
051 this.index = index;
052 }
053
054 /**
055 * Determines whether two specified instances of IndexedPropertyDefinition
056 * are equal.
057 *
058 * @param idxPropDef1 First indexed property definition.
059 * @param idxPropDef2 Second indexed property definition.
060 * @return True if indexed property definitions are equal.
061 */
062 protected static boolean isEqualTo(IndexedPropertyDefinition idxPropDef1,
063 IndexedPropertyDefinition idxPropDef2) {
064 return (idxPropDef1 == idxPropDef2) ||
065 (idxPropDef1 != null &&
066 idxPropDef2 != null &&
067 idxPropDef1.getUri().equalsIgnoreCase(
068 idxPropDef2.getUri()) && idxPropDef1.index
069 .equalsIgnoreCase(idxPropDef2.index));
070 }
071
072 /**
073 * Gets the index of the property.
074 *
075 * @return The index string of the property.
076 */
077 public String getIndex() {
078 return this.index;
079 }
080
081 /**
082 * Writes the attribute to XML.
083 *
084 * @param writer the writer
085 * @throws ServiceXmlSerializationException the service xml serialization exception
086 */
087 @Override
088 protected void writeAttributesToXml(EwsServiceXmlWriter writer)
089 throws ServiceXmlSerializationException {
090 super.writeAttributesToXml(writer);
091 writer.writeAttributeValue(XmlAttributeNames.FieldIndex, this
092 .getIndex());
093 }
094
095 /**
096 * Gets the name of the XML element.
097 *
098 * @return XML element name.
099 */
100 @Override
101 protected String getXmlElementName() {
102 return XmlElementNames.IndexedFieldURI;
103 }
104
105 /**
106 * Gets the property definition's printable name.
107 *
108 * @return The property definition's printable name.
109 */
110 @Override public String getPrintableName() {
111 return String.format("%s:%s", this.getUri(), this.getIndex());
112 }
113
114
115 /**
116 * Determines whether a given indexed property definition is equal to this
117 * indexed property definition.
118 *
119 * @param obj The
120 * object to check for equality.
121 * @return True if the property definitions define the same indexed
122 * property.
123 */
124 @Override
125 public boolean equals(Object obj) {
126 if (this == obj) {
127 return true;
128 }
129 if (obj instanceof IndexedPropertyDefinition) {
130 return IndexedPropertyDefinition.isEqualTo(
131 (IndexedPropertyDefinition) obj, this);
132 } else {
133 return false;
134 }
135 }
136
137 /**
138 * Serves as a hash function for a particular type.
139 *
140 * @return A hash code for the current System.Object
141 */
142 @Override
143 public int hashCode() {
144 return this.getUri().hashCode() ^ this.getIndex().hashCode();
145 }
146
147 /**
148 * Gets the property type.
149 */
150 @Override
151 public Class<String> getType() {
152 return String.class;
153 }
154
155 }