1##
2#    Copyright (c) 2007-2011 Cyrus Daboo. All rights reserved.
3#
4#    Licensed under the Apache License, Version 2.0 (the "License");
5#    you may not use this file except in compliance with the License.
6#    You may obtain a copy of the License at
7#
8#        http://www.apache.org/licenses/LICENSE-2.0
9#
10#    Unless required by applicable law or agreed to in writing, software
11#    distributed under the License is distributed on an "AS IS" BASIS,
12#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13#    See the License for the specific language governing permissions and
14#    limitations under the License.
15##
16
17# vCard ADR value
18
19from pycalendar import utils
20from pycalendar.valueutils import ValueMixin
21
22class N(ValueMixin):
23    """
24    mValue is a tuple of seven str or tuples of str
25    """
26
27    # This is the order of fields in the vCard property value
28    (
29        LAST,
30        FIRST,
31        MIDDLE,
32        PREFIX,
33        SUFFIX,
34        MAXITEMS
35    ) = range(6)
36
37    def __init__(self, last="", first="", middle="", prefix="", suffix=""):
38        self.mValue = (last, first, middle, prefix, suffix)
39
40    def duplicate(self):
41        return N(*self.mValue)
42
43    def __hash__(self):
44        return hash(self.mValue)
45
46    def __repr__(self):
47        return "N %s" % (self.getText(),)
48
49    def __eq__( self, comp ):
50        return self.mValue == comp.mValue
51
52    def getFirst(self):
53        return self.mValue[N.FIRST]
54
55    def setFirst(self, value):
56        self.mValue[N.FIRST] = value
57
58    def getLast(self):
59        return self.mValue[N.LAST]
60
61    def setLast(self, value):
62        self.mValue[N.LAST] = value
63
64    def getMiddle(self):
65        return self.mValue[N.MIDDLE]
66
67    def setMiddle(self, value):
68        self.mValue[N.MIDDLE] = value
69
70    def getPrefix(self):
71        return self.mValue[N.PREFIX]
72
73    def setPrefix(self, value):
74        self.mValue[N.PREFIX] = value
75
76    def getSuffix(self):
77        return self.mValue[N.SUFFIX]
78
79    def setSuffix(self, value):
80        self.mValue[N.SUFFIX] = value
81
82    def getFullName(self):
83
84        def _stringOrList(item):
85            return item if isinstance(item, basestring) else " ".join(item)
86
87        results = []
88        for i in (N.PREFIX, N.FIRST, N.MIDDLE, N.LAST, N.SUFFIX):
89            result = _stringOrList(self.mValue[i])
90            if result:
91                results.append(result)
92
93        return " ".join(results)
94
95    def parse(self, data):
96        self.mValue = utils.parseDoubleNestedList(data, N.MAXITEMS)
97
98    def generate(self, os):
99        utils.generateDoubleNestedList(os, self.mValue)
100
101    def getValue(self):
102        return self.mValue
103
104    def setValue(self, value):
105        self.mValue = value
106