001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.api.group;
017    
018    import org.kuali.rice.core.api.mo.common.GloballyUnique;
019    import org.kuali.rice.core.api.mo.common.Identifiable;
020    import org.kuali.rice.core.api.mo.common.Versioned;
021    import org.kuali.rice.core.api.mo.common.active.Inactivatable;
022    
023    import java.util.Map;
024    /**
025     * This is the contract for a Group.  A group is a collection of principals.  It's membership consists of direct principal
026     * assignment and/or nested group membership.  All groups are uniquely identified by a namespace
027     * code plus a name.
028     *
029     *
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     */
032    
033    public interface GroupContract extends Versioned, GloballyUnique, Inactivatable, Identifiable {
034    
035        /**
036         * This is the namespace code for the Group.
037         *
038         * <p>
039         * This is a namespace code assigned to a Group.  Together with name, it makes up another unique identifier for Group
040         * </p>
041         *
042         * @return namespaceCode
043         */
044        String getNamespaceCode();
045    
046        /**
047         * This is the name for the Group.
048         *
049         * <p>
050         * This is a name assigned to a Group.  Together with NamespaceCode, it makes up another unique identifier for Group
051         * </p>
052         *
053         * @return name
054         */
055            String getName();
056    
057        /**
058         * This a description for the Group.
059         *
060         * <p>
061         * This is a description assigned to a Group.
062         * </p>
063         *
064         * @return description
065         */
066            String getDescription();
067    
068        /**
069         * This a Kim Type Id for the Group.
070         *
071         * <p>
072         * This links a Kim Type to the Group to allow custom types of Groups.
073         * </p>
074         *
075         * @return description
076         */
077            String getKimTypeId();
078    
079        /**
080         * This is a set of Attributes for a Group.
081         *
082         * <p>
083         * This is a set of attributes which are key-label pairs that are defined by the Group's Kim Type.
084         * </p>
085         *
086         * @return attributes
087         */
088            Map<String, String> getAttributes();
089    
090    }