All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bibliothek.gui.dock.facile.action.RenameActionFactory Maven / Gradle / Ivy

Go to download

DockingFrames is an open source Java Swing docking framework, licenced under LGPL 2.1. This is the same distribution as the original distribution (http://www.docking-frames.org/), only reinstalled in maven

There is a newer version: 1.1.2p20b.fix-1
Show newest version
/*
 * Bibliothek - DockingFrames
 * Library built on Java/Swing, allows the user to "drag and drop"
 * panels containing any Swing-Component the developer likes to add.
 * 
 * Copyright (C) 2007 Benjamin Sigg
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * Benjamin Sigg
 * [email protected]
 * CH - Switzerland
 */

package bibliothek.gui.dock.facile.action;

import java.util.HashMap;
import java.util.Map;

import bibliothek.gui.DockController;
import bibliothek.gui.Dockable;
import bibliothek.gui.dock.DefaultDockable;
import bibliothek.gui.dock.FlapDockStation;
import bibliothek.gui.dock.SplitDockStation;
import bibliothek.gui.dock.StackDockStation;
import bibliothek.util.ClientOnly;

/**
 * A factory creating {@link RenameAction RenameActions} for a
 * {@link DockController}. There is one action created for each {@link Class}, 
 * these actions are not removed before this factory is collected by the 
 * garbage collector.
 * @author Benjamin Sigg
 */
@ClientOnly
public class RenameActionFactory {
    /** The controller for which actions are created */
    private DockController controller;
    
    /** Already created actions */
    private Map, RenameAction> actions = new HashMap, RenameAction>();
    
    /**
     * Creates a new factory
     * @param controller the controller for which actions will be created
     */
    public RenameActionFactory( DockController controller ){
        if( controller == null )
            throw new IllegalArgumentException( "Controller must not be null" );
        
        this.controller = controller;
    }
    
    /**
     * Gets the controller which is used to create the actions.
     * @return the controller
     */
    public DockController getController() {
        return controller;
    }
    
    /**
     * Gets an action for owner.
     * @param owner the Dockable for which an action is searched
     * @return the action
     */
    public RenameAction find( Dockable owner ){
        if( owner == null )
            throw new IllegalArgumentException( "Owner must not be null" );
        
        Class clazz = owner.getClass();
        RenameAction action = find( clazz );
        if( action == null )
            throw new IllegalStateException( "Can't find a rule for " + clazz.getName() );
        return action;
    }
    
    /**
     * Searches or creates a {@link RenameAction} for owner.
     * @param owner the owner for which an action is searched
     * @return the action or null if no rule for owner
     * was found
     */
    protected RenameAction find( Class owner ){
        RenameAction action = actions.get( owner );
        if( action == null ){
            action = create( owner );
            if( action == null ){
                Class superclass = owner.getSuperclass();
                if( superclass == null )
                    return null;
                
                action = find( superclass );
            }
            
            if( action != null ){
                actions.put( owner, action );
            }
        }
        return action;
    }
    
    /**
     * Creates a new action for the specified type. Subclasses may override this
     * method to support more classes. Currently supported are {@link DefaultDockable},
     * {@link SplitDockStation}, {@link FlapDockStation} and {@link StackDockStation}.
     * @param owner the type for which the action is created
     * @return the new action and the type which can use the action.
     */
    protected RenameAction create( Class owner ){
        if( owner.equals( DefaultDockable.class ) )
            return new RenameAction.RenameDefaultDockable( controller );
        
        if( owner.equals( SplitDockStation.class ))
            return  new RenameAction.RenameSplitDockStation( controller );
        
        if( owner.equals( FlapDockStation.class ))
            return  new RenameAction.RenameFlapDockStation( controller );
        
        if( owner.equals( StackDockStation.class ))
            return new RenameAction.RenameStackDockStation( controller );
        
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy