classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [cp-patches] FYI: Added some real functionality to SystemFlavorMap


From: Michael Koch
Subject: Re: [cp-patches] FYI: Added some real functionality to SystemFlavorMap
Date: Tue, 29 Nov 2005 09:19:49 +0100
User-agent: Mutt/1.5.9i

On Tue, Nov 29, 2005 at 12:33:29AM +0100, Jan R?hrich wrote:
> I started to exchange some of SystemFlavorMaps implementation to a
> version with real functionality. Btw. I implemented the methods that
> were missing to JDK1.4 interface conformance.

...

> +  /**
> +   * This map maps native <code>String</code>s to lists of 
> +   * <code>DataFlavor</code>s
> +   */
> +  private Map nativeToFlavorMap = new HashMap();

It is better to use: private HashMap nativeToFlavorMap = new HashMap();
As in most cases invocations on interface are slower then on direct
classes.

> +  /**
> +   * This map maps <code>DataFlavor</code>s to lists of native 
> +   * <code>String</code>s
> +   */
> +  private Map flavorToNativeMap = new HashMap();

Same here.

>    /**
>     * Private constructor.
> @@ -183,6 +196,161 @@
>    public List getNativesForFlavor (DataFlavor flav)
>    {
>      throw new Error ("Not implemented");
> +  }
> +  
> +  /**
> +   * Adds a mapping from a single <code>String</code> native to a single
> +   * <code>DataFlavor</code>. Unlike <code>getFlavorsForNative</code>, the
> +   * mapping will only be established in one direction, and the native will
> +   * not be encoded. To establish a two-way mapping, call
> +   * <code>addUnencodedNativeForFlavor</code> as well. The new mapping will
> +   * be of lower priority than any existing mapping.
> +   * This method has no effect if a mapping from the specified
> +   * <code>String</code> native to the specified or equal
> +   * <code>DataFlavor</code> already exists.
> +   *
> +   * @param nativeStr the <code>String</code> native key for the mapping
> +   * @param flavor the <code>DataFlavor</code> value for the mapping
> +   * @throws NullPointerException if nat or flav is <code>null</code>
> +   *
> +   * @see #addUnencodedNativeForFlavor
> +   * @since 1.4
> +   */
> +  public synchronized void addFlavorForUnencodedNative(String nativeStr, 
> +                                                       DataFlavor flavor)
> +  {
> +    if((nativeStr == null) || (flavor == null))

Please add a space after 'if'.

> +      throw new NullPointerException();
> +    List flavors = (List) nativeToFlavorMap.get(nativeStr);
> +    if(flavors == null) 
> +      {
> +        flavors = new ArrayList();
> +        nativeToFlavorMap.put(nativeStr, flavors);
> +      }
> +    else
> +      {
> +        if(!flavors.contains(flavor))

According to our current style you should write:

if (! flavors.contains(flavor))

> +          flavors.add(flavor);
> +      }
> +  }
> +  
> +  /**
> +   * Adds a mapping from the specified <code>DataFlavor</code> (and all
> +   * <code>DataFlavor</code>s equal to the specified <code>DataFlavor</code>)
> +   * to the specified <code>String</code> native.
> +   * Unlike <code>getNativesForFlavor</code>, the mapping will only be
> +   * established in one direction, and the native will not be encoded. To
> +   * establish a two-way mapping, call
> +   * <code>addFlavorForUnencodedNative</code> as well. The new mapping will 
> +   * be of lower priority than any existing mapping.
> +   * This method has no effect if a mapping from the specified or equal
> +   * <code>DataFlavor</code> to the specified <code>String</code> native
> +   * already exists.
> +   *
> +   * @param flavor the <code>DataFlavor</code> key for the mapping
> +   * @param nativeStr the <code>String</code> native value for the mapping
> +   * @throws NullPointerException if flav or nat is <code>null</code>
> +   *
> +   * @see #addFlavorForUnencodedNative
> +   * @since 1.4
> +   */
> +  public synchronized void addUnencodedNativeForFlavor(DataFlavor flavor,
> +                                                       String nativeStr) 
> +  {
> +    if((nativeStr == null) || (flavor == null))
> +      throw new NullPointerException();
> +    List natives = (List) flavorToNativeMap.get(flavor);
> +    if(natives == null) 
> +      {
> +        natives = new ArrayList();
> +        flavorToNativeMap.put(flavor, natives);
> +      }
> +    else
> +      {
> +        if(!natives.contains(nativeStr))
> +          natives.add(nativeStr);
> +      }
> +  }
> +  
> +  /**
> +   * Discards the current mappings for the specified <code>DataFlavor</code>
> +   * and all <code>DataFlavor</code>s equal to the specified
> +   * <code>DataFlavor</code>, and creates new mappings to the 
> +   * specified <code>String</code> natives.
> +   * Unlike <code>getNativesForFlavor</code>, the mappings will only be
> +   * established in one direction, and the natives will not be encoded. To
> +   * establish two-way mappings, call <code>setFlavorsForNative</code>
> +   * as well. The first native in the array will represent the highest
> +   * priority mapping. Subsequent natives will represent mappings of
> +   * decreasing priority.
> +   * <p>
> +   * If the array contains several elements that reference equal
> +   * <code>String</code> natives, this method will establish new mappings
> +   * for the first of those elements and ignore the rest of them.
> +   * <p> 
> +   * It is recommended that client code not reset mappings established by the
> +   * data transfer subsystem. This method should only be used for
> +   * application-level mappings.
> +   *
> +   * @param flavor the <code>DataFlavor</code> key for the mappings
> +   * @param natives the <code>String</code> native values for the mappings
> +   * @throws NullPointerException if flav or natives is <code>null</code>
> +   *         or if natives contains <code>null</code> elements
> +   *
> +   * @see #setFlavorsForNative
> +   * @since 1.4
> +   */
> +  public synchronized void setNativesForFlavor(DataFlavor flavor,
> +                                               String[] natives) 
> +  {
> +    if((natives == null) || (flavor == null))
> +      throw new NullPointerException();
> +    
> +    flavorToNativeMap.remove(flavor);
> +    for(int i = 0; i < natives.length; i++) 

Please add a space after 'for'.

> +      {
> +        addUnencodedNativeForFlavor(flavor, natives[i]);
> +      }
> +  }
> +  
> +  /**
> +   * Discards the current mappings for the specified <code>String</code>
> +   * native, and creates new mappings to the specified
> +   * <code>DataFlavor</code>s. Unlike <code>getFlavorsForNative</code>, the
> +   * mappings will only be established in one direction, and the natives need
> +   * not be encoded. To establish two-way mappings, call
> +   * <code>setNativesForFlavor</code> as well. The first
> +   * <code>DataFlavor</code> in the array will represent the highest priority
> +   * mapping. Subsequent <code>DataFlavor</code>s will represent mappings of
> +   * decreasing priority.
> +   * <p>
> +   * If the array contains several elements that reference equal
> +   * <code>DataFlavor</code>s, this method will establish new mappings
> +   * for the first of those elements and ignore the rest of them.
> +   * <p>
> +   * It is recommended that client code not reset mappings established by the
> +   * data transfer subsystem. This method should only be used for
> +   * application-level mappings.
> +   *
> +   * @param nativeStr the <code>String</code> native key for the mappings
> +   * @param flavors the <code>DataFlavor</code> values for the mappings
> +   * @throws NullPointerException if nat or flavors is <code>null</code>
> +   *         or if flavors contains <code>null</code> elements
> +   *
> +   * @see #setNativesForFlavor
> +   * @since 1.4
> +   */
> +  public synchronized void setFlavorsForNative(String nativeStr,
> +                                               DataFlavor[] flavors) 
> +  {
> +    if((nativeStr == null) || (flavors == null))
> +      throw new NullPointerException();
> +    
> +    nativeToFlavorMap.remove(nativeStr);
> +    for(int i = 0; i < flavors.length; i++) 
> +      {
> +        addFlavorForUnencodedNative(nativeStr, flavors[i]);
> +      }
>    }
>  
>  } // class SystemFlavorMap


Thanks for your great work and sorry for my little nitpicking.


Cheers,
Michael
-- 
Escape the Java Trap with GNU Classpath!
http://www.gnu.org/philosophy/java-trap.html

Join the community at http://planet.classpath.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]