package com.dlsc.flexgantt.showcase.demo.editing;

import java.awt.dnd.DnDConstants;
import java.util.Calendar;

import com.dlsc.flexgantt.command.CommandException;
import com.dlsc.flexgantt.command.IProgressMonitor;
import com.dlsc.flexgantt.command.treetable.DefaultCreateNodeCommand;
import com.dlsc.flexgantt.model.TimeSpan;
import com.dlsc.flexgantt.model.gantt.DefaultActivityObject;
import com.dlsc.flexgantt.model.gantt.DefaultGanttChartNode;
import com.dlsc.flexgantt.model.treetable.DefaultTreeTableModel;
import com.dlsc.flexgantt.model.treetable.IMutableTreeTableNode;

public class EditingDemoCreateNodeCommand extends DefaultCreateNodeCommand {

    public EditingDemoCreateNodeCommand(IMutableTreeTableNode parent,
            DefaultTreeTableModel model, Object key, Object[] values) {
        super(parent, model, key, values);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void executeCommand(IProgressMonitor monitor) throws CommandException {
        super.executeCommand(monitor);

        Calendar st = Calendar.getInstance();
        Calendar et = Calendar.getInstance();
        et.add(Calendar.DAY_OF_WEEK, 7);
        DefaultGanttChartNode child = (DefaultGanttChartNode) getChildNode();
        DefaultActivityObject tlo = new DefaultActivityObject(new TimeSpan(st,
                et));
        tlo.setDragActions(DnDConstants.ACTION_NONE);
        tlo.setDurationChangeable(true);

        child.addTimelineObject(EditingDemoGanttChartModel.DEFAULT_LAYER, tlo);
    }

    @Override
    protected IMutableTreeTableNode createNewNode() {
        return new EditingDemoGanttChartNode();
    }

    /*
     * No need to also override the undoCommand() method because the timeline
     * object created above is only associated with the node and will be garbage
     * collected when the node gets removed from the model.
     */
}
