Package org.locationtech.udig.project.internal.commands

Source Code of org.locationtech.udig.project.internal.commands.DeleteFolderItemCommand

/* uDig - User Friendly Desktop Internet GIS client
* http://udig.refractions.net
* (C) 2012, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.project.internal.commands;

import java.util.List;

import org.locationtech.udig.project.ILegendItem;
import org.locationtech.udig.project.command.AbstractCommand;
import org.locationtech.udig.project.command.UndoableMapCommand;
import org.locationtech.udig.project.internal.Folder;
import org.locationtech.udig.project.internal.Map;
import org.locationtech.udig.project.internal.Messages;

import org.eclipse.core.runtime.IProgressMonitor;

/**
* Deletes a Folder item from the map. More specifically, deletes a Folder item from the LegendItem
* list of the map.
*
* @author Naz Chan (LISAsoft)
* @since 1.3.1
*/
public class DeleteFolderItemCommand extends AbstractCommand implements UndoableMapCommand {

    /**
     * Folder to be deleted
     */
    private Folder folder;

    private Object parent;

    /**
     * Index of the folder to be deleted in the LegendItem list
     */
    private int index;

    public DeleteFolderItemCommand(Folder folder) {
        this.folder = folder;
    }

    @Override
    public String getName() {
        return Messages.DeleteFolderItemCommand_Name;
    }

    @Override
    public void run(IProgressMonitor monitor) throws Exception {
        initializeDelete();
        if (parent != null) {
           
            if (parent instanceof Map) {
                getMap().getLegend().remove(folder);
            } else if (parent instanceof Folder) {
                final Folder parentFolder = (Folder) parent;
                parentFolder.getItems().remove(folder);
            }
        }
        // TODO - Save currently selected item
        // TODO - If currently selected item is folder, select next item
    }

    @Override
    public void rollback(IProgressMonitor monitor) throws Exception {
        getMap().getLegend().add(index, folder);
        // TODO - Restore currently selected item
    }

    /**
     * Checks if folder is existing in the map and initialises isInMap and index variables.
     */
    private void initializeDelete() {
        final Map map = getMap();
        final List<ILegendItem> items = map.getLegend();
        if (items.contains(folder)) {
            parent = getMap();
            index = items.indexOf(folder);
        } else {
            for (ILegendItem item : items) {
                if (item instanceof Folder) {
                    final boolean isSet = setParent((Folder) item);
                    if (isSet) {
                        break;
                    }
                }
            }   
        }
    }

    private boolean setParent(Folder parentFolder) {
        final List<ILegendItem> items = parentFolder.getItems();
        if (items.contains(folder)) {
            parent = parentFolder;
            index = items.indexOf(folder);
            return true;
        } else {
            for (ILegendItem item : items) {
                if (item instanceof Folder) {
                    final boolean isSet = setParent((Folder) item);
                    if (isSet) {
                        return true;
                    }
                }
            }   
        }
        return false;
    }
   
}
TOP

Related Classes of org.locationtech.udig.project.internal.commands.DeleteFolderItemCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.