001/****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one   *
003 * or more contributor license agreements.  See the NOTICE file *
004 * distributed with this work for additional information        *
005 * regarding copyright ownership.  The ASF licenses this file   *
006 * to you under the Apache License, Version 2.0 (the            *
007 * "License"); you may not use this file except in compliance   *
008 * with the License.  You may obtain a copy of the License at   *
009 *                                                              *
010 *   http://www.apache.org/licenses/LICENSE-2.0                 *
011 *                                                              *
012 * Unless required by applicable law or agreed to in writing,   *
013 * software distributed under the License is distributed on an  *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
015 * KIND, either express or implied.  See the License for the    *
016 * specific language governing permissions and limitations      *
017 * under the License.                                           *
018 ****************************************************************/
019
020package org.apache.james.mime4j.dom.address;
021
022import java.util.ArrayList;
023import java.util.Arrays;
024import java.util.Collection;
025import java.util.List;
026
027/**
028 * A named group of zero or more mailboxes.
029 */
030public class Group extends Address {
031
032    private static final long serialVersionUID = 1L;
033
034    private final String name;
035    private final MailboxList mailboxList;
036
037    /**
038     * @param name
039     *            The group name.
040     * @param mailboxes
041     *            The mailboxes in this group.
042     */
043    public Group(String name, MailboxList mailboxes) {
044        if (name == null)
045            throw new IllegalArgumentException();
046        if (mailboxes == null)
047            throw new IllegalArgumentException();
048
049        this.name = name;
050        this.mailboxList = mailboxes;
051    }
052
053    /**
054     * @param name
055     *            The group name.
056     * @param mailboxes
057     *            The mailboxes in this group.
058     */
059    public Group(String name, Mailbox... mailboxes) {
060        this(name, new MailboxList(Arrays.asList(mailboxes), true));
061    }
062
063    /**
064     * @param name
065     *            The group name.
066     * @param mailboxes
067     *            The mailboxes in this group.
068     */
069    public Group(String name, Collection<Mailbox> mailboxes) {
070        this(name, new MailboxList(new ArrayList<Mailbox>(mailboxes), true));
071    }
072
073    /**
074     * Returns the group name.
075     */
076    public String getName() {
077        return name;
078    }
079
080    /**
081     * Returns the mailboxes in this group.
082     */
083    public MailboxList getMailboxes() {
084        return mailboxList;
085    }
086
087    @Override
088    protected void doAddMailboxesTo(List<Mailbox> results) {
089        for (Mailbox mailbox : mailboxList) {
090            results.add(mailbox);
091        }
092    }
093
094    @Override
095    public String toString() {
096        StringBuilder sb = new StringBuilder();
097        sb.append(name);
098        sb.append(':');
099        boolean first = true;
100        for (Mailbox mailbox : mailboxList) {
101            if (first) {
102                first = false;
103            } else {
104                sb.append(',');
105            }
106            sb.append(' ');
107            sb.append(mailbox);
108        }
109        sb.append(";");
110        return sb.toString();
111    }
112
113}