/**
 * Copyright (c) 2012, Ben Fortuna
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  o Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 *  o Neither the name of Ben Fortuna nor the names of any other contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package net.fortuna.ical4j.vcard;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.fortuna.ical4j.vcard.Group.Id;

/**
 * A registry for standard and non-standard property groups.
 * 
 * $Id$
 *
 * Created on: 05/01/2009
 *
 * @author Ben
 *
 */
public class GroupRegistry {

    private static final Log LOG = LogFactory.getLog(GroupRegistry.class);
    
    private final Map<Id, Group> defaultGroups;
    
    private final Map<String, Group> extendedGroups;
    
    /**
     * 
     */
    public GroupRegistry() {
        defaultGroups = new HashMap<Id, Group>();
        defaultGroups.put(Id.HOME, Group.HOME);
        defaultGroups.put(Id.WORK, Group.WORK);
        extendedGroups = new ConcurrentHashMap<String, Group>();
    }
    
    /**
     * @param value a string representation of a group identifier
     * @return a registered group with the specified identifier. If no such group
     * is found null is returned
     */
    public Group getGroup(final String value) {
        try {
            return defaultGroups.get(Id.valueOf(value));
        }
        catch (Exception e) {
            LOG.info("Not a default group: [" + value + "]");
        }
        return extendedGroups.get(value);
    }
    
    /**
     * Registers a non-standard group.
     * @param extendedName the extended name of the group
     * @param group the group
     */
    public void register(final String extendedName, final Group group) {
        extendedGroups.put(extendedName, group);
    }
}

@@ -1607,96 +1607,42 @@
 ort 
-java.util.HashMap;%0Aimport java.util.Map;%0Aimport java.util.concurrent.ConcurrentHashMap;%0A
+net.fortuna.ical4j.vcard.Group.Id;
 %0Aimp
@@ -1735,41 +1735,94 @@
 ort 
-net.fortuna.ical4j.vcard.Group.Id
+java.util.HashMap;%0Aimport java.util.Map;%0Aimport java.util.concurrent.ConcurrentHashMap
 ;%0A%0A/
@@ -1887,17 +1887,16 @@
 oups.%0A *
- 
 %0A * $Id$
@@ -2055,20 +2055,16 @@
 class);%0A
-    
 %0A    pri
@@ -2100,28 +2100,24 @@
 aultGroups;%0A
-    
 %0A    private
@@ -2158,20 +2158,16 @@
 Groups;%0A
-    
 %0A    /**
@@ -2173,17 +2173,16 @@
 *%0A     *
- 
 %0A     */
@@ -2420,36 +2420,32 @@
 Group%3E();%0A    %7D%0A
-    
 %0A    /**%0A     * 
@@ -2686,51 +2686,53 @@
     
-try %7B%0A            return defaultGroups.get(
+Id id = null;%0A        try %7B%0A            id = 
 Id.v
@@ -2744,17 +2744,16 @@
 f(value)
-)
 ;%0A      
@@ -2771,16 +2771,22 @@
  catch (
+final 
 Exceptio
@@ -2787,17 +2787,23 @@
 ception 
-e
+ignored
 ) %7B%0A    
@@ -2810,35 +2810,63 @@
     
+%7D%0A%0A
     
-LOG.info(%22Not a
+    if (id != null) %7B%0A            return
  default
  gro
@@ -2865,32 +2865,21 @@
 ault
- g
+G
 roup
-: %5B%22 + value + %22%5D%22
+s.get(id
 );%0A 
@@ -2879,32 +2879,33 @@
 (id);%0A        %7D%0A
+%0A
         return e
@@ -2936,20 +2936,16 @@
 ;%0A    %7D%0A
-    
 %0A    /**

Allow for arbitrary group names. They shouldn't need to be registered.