summaryrefslogtreecommitdiff
path: root/src/main/java/com/p4square/ccbapi/model/GroupSearchResult.java
blob: 0c8acd5faa660985db7793228f0a23bc92448e8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
package com.p4square.ccbapi.model;

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement(name="item")
@XmlAccessorType(XmlAccessType.NONE)
public class GroupSearchResult {

    @XmlElement(name="id")
    private int id;

    @XmlElement(name="name")
    private String name;

    @XmlElement(name="group_type_name")
    private String groupTypeName;

    @XmlElement(name="grouping_name")
    private String departmentName;

    @XmlElement(name="area_name")
    @XmlJavaTypeAdapter(CCBIDReference.Adapter.class)
    private Reference area;

    @XmlElement(name="meet_day_name")
    private String meetingDayName;

    @XmlElement(name="meet_time_name")
    private String meetingTimeName;

    @XmlElement(name="description")
    private String description;

    /**
     * This attribute is undefined in the CCB docs. I suspect that it is
     * the negative {@link GroupProfile#isActive()} attribute, but since
     * "Group must be active" to be included in the search results, I
     * have no way to confirm.
     *
     * I'm leaving this field inaccessible until it can be confirmed.
     */
    @XmlElement(name="status_id")
    private int statusId;

    @XmlElement(name="messaging_type")
    @XmlJavaTypeAdapter(InteractionTypeAdapter.class)
    private InteractionType interactionType;

    @XmlElement(name="membership_type")
    @XmlJavaTypeAdapter(MembershipTypeAdapter.class)
    private MembershipType membershipType;

    @XmlElement(name="owner_name")
    @XmlJavaTypeAdapter(CCBIDReference.Adapter.class)
    private Reference mainLeader;

    @XmlElement(name="owner_email_primary")
    private String mainLeaderEmail;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGroupTypeName() {
        return groupTypeName;
    }

    public void setGroupTypeName(String groupTypeName) {
        this.groupTypeName = groupTypeName;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    public Reference getArea() {
        return area;
    }

    public void setArea(Reference area) {
        this.area = area;
    }

    public String getMeetingDayName() {
        return meetingDayName;
    }

    public void setMeetingDayName(String meetingDayName) {
        this.meetingDayName = meetingDayName;
    }

    public String getMeetingTimeName() {
        return meetingTimeName;
    }

    public void setMeetingTimeName(String meetingTimeName) {
        this.meetingTimeName = meetingTimeName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public InteractionType getInteractionType() {
        return interactionType;
    }

    public void setInteractionType(InteractionType interactionType) {
        this.interactionType = interactionType;
    }

    public MembershipType getMembershipType() {
        return membershipType;
    }

    public void setMembershipType(MembershipType membershipType) {
        this.membershipType = membershipType;
    }

    public Reference getMainLeader() {
        return mainLeader;
    }

    public void setMainLeader(Reference mainLeader) {
        this.mainLeader = mainLeader;
    }

    public String getMainLeaderEmail() {
        return mainLeaderEmail;
    }

    public void setMainLeaderEmail(String mainLeaderEmail) {
        this.mainLeaderEmail = mainLeaderEmail;
    }

    /**
     * GroupProfile and GroupSearchResult use different serializations of the InteractionType enumeration.
     */
    private static final class InteractionTypeAdapter extends XmlAdapter<String, InteractionType> {
        @Override
        public InteractionType unmarshal(String s) throws Exception {
            switch (s) {
                case "Interact":
                    return InteractionType.MEMBERS_INTERACT;
                case "Announce":
                    return InteractionType.ANNOUNCEMENT_ONLY;
                default:
                    throw new IllegalArgumentException("Unknown InteractionType string '" + s + "'");
            }
        }

        @Override
        public String marshal(InteractionType membershipType) throws Exception {
            switch (membershipType) {
                case MEMBERS_INTERACT:
                    return "Interact";
                case ANNOUNCEMENT_ONLY:
                    return "Announce";
                case ADMINISTRATIVE:
                    throw new UnsupportedOperationException("InteractionType.ADMINISTRATIVE not allowed in search.");
                default:
                    throw new UnsupportedOperationException("No support for " + membershipType);
            }
        }
    }

    /**
     * GroupProfile and GroupSearchResult use different serializations of the MembershipType enumeration.
     */
    private static final class MembershipTypeAdapter extends XmlAdapter<String, MembershipType> {
        @Override
        public MembershipType unmarshal(String s) throws Exception {
            switch (s) {
                case "Request":
                    return MembershipType.MODERATED;
                case "Open":
                    return MembershipType.OPEN;
                default:
                    throw new IllegalArgumentException("Unknown MembershipType string '" + s + "'");
            }
        }

        @Override
        public String marshal(MembershipType membershipType) throws Exception {
            switch (membershipType) {
                case MODERATED:
                    return "Request";
                case OPEN:
                    return "Open";
                default:
                    throw new UnsupportedOperationException("No support for " + membershipType);
            }
        }
    }

}