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

jdplus.toolkit.desktop.plugin.ui.calendar.actions.CloneCalendarAction Maven / Gradle / Ivy

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jdplus.toolkit.desktop.plugin.ui.calendar.actions;

import jdplus.toolkit.desktop.plugin.nodes.SingleNodeAction;
import jdplus.toolkit.desktop.plugin.ui.calendar.ChainedGregorianCalendarPanel;
import jdplus.toolkit.desktop.plugin.ui.calendar.CompositeGregorianCalendarPanel;
import jdplus.toolkit.desktop.plugin.ui.calendar.NationalCalendarPanel;
import jdplus.toolkit.desktop.plugin.workspace.CalendarDocumentManager;
import jdplus.toolkit.desktop.plugin.workspace.nodes.ItemWsNode;
import jdplus.toolkit.base.api.timeseries.calendars.*;
import jdplus.toolkit.base.api.timeseries.regression.ModellingContext;
import jdplus.toolkit.base.api.util.WeightedItem;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;

import java.util.Arrays;
import java.util.List;

@ActionID(category = "Tools", id = "demetra.desktop.ui.calendars.actions.CloneCalendarAction")
@ActionRegistration(displayName = "#CTL_CloneCalendarAction", lazy = false)
@ActionReferences({
    @ActionReference(path = CalendarDocumentManager.ITEMPATH, position = 1421, separatorBefore = 1400)
})
@Messages("CTL_CloneCalendarAction=Clone")
public final class CloneCalendarAction extends SingleNodeAction {

    public CloneCalendarAction() {
        super(ItemWsNode.class);
    }

    @Override
    protected void performAction(ItemWsNode activatedNode) {
        CalendarManager manager = ModellingContext.getActiveContext().getCalendars();
        CalendarDefinition o = AddCalendarAction.getProvider(activatedNode);
        if (o instanceof Calendar) {
            cloneNationalCalendar(manager, (Calendar) o, activatedNode);
        } else if (o instanceof ChainedCalendar) {
            cloneChainedCalendar(manager, (ChainedCalendar) o, activatedNode);
        } else if (o instanceof CompositeCalendar) {
            cloneCompositeCalendar(manager, (CompositeCalendar) o, activatedNode);
        }
    }

    @Override
    protected boolean enable(ItemWsNode activatedNode) {
        CalendarDefinition o = AddCalendarAction.getProvider(activatedNode);
        return o instanceof Calendar
                || o instanceof ChainedCalendar
                || o instanceof CompositeCalendar;
    }

    @Override
    public String getName() {
        return Bundle.CTL_CloneCalendarAction();
    }

    @Messages({
        "cloneNationalCalendar.dialog.title=Clone National Calendar"
    })
    static void cloneNationalCalendar(CalendarManager manager, Calendar p, ItemWsNode node) {
        NationalCalendarPanel panel = new NationalCalendarPanel();
        panel.setHolidays(Arrays.asList(p.getHolidays()));

        DialogDescriptor dd = panel.createDialogDescriptor(Bundle.cloneNationalCalendar_dialog_title());
        if (DialogDisplayer.getDefault().notify(dd) == NotifyDescriptor.OK_OPTION) {
            List holidays = panel.getHolidays();
            Calendar newObject = new Calendar(holidays.toArray(new Holiday[holidays.size()]));
            AddCalendarAction.add(manager, panel.getCalendarName(), newObject);
        }
    }

    @Messages({
        "cloneChainedCalendar.dialog.title=Clone Chained Calendar"
    })
    static void cloneChainedCalendar(CalendarManager manager, ChainedCalendar p, ItemWsNode node) {
        ChainedGregorianCalendarPanel panel = new ChainedGregorianCalendarPanel();
        panel.setFirstCalendar(p.getFirst());
        panel.setDayBreak(p.getBreakDate());
        panel.setSecondCalendar(p.getSecond());

        DialogDescriptor dd = panel.createDialogDescriptor(Bundle.cloneChainedCalendar_dialog_title());
        if (DialogDisplayer.getDefault().notify(dd) == NotifyDescriptor.OK_OPTION) {
            ChainedCalendar newObject = new ChainedCalendar(panel.getFirstCalendar(), panel.getSecondCalendar(), panel.getDayBreak());
            AddCalendarAction.add(manager, panel.getCalendarName(), newObject);
        }
    }

    @Messages({
        "cloneCompositeCalendar.dialog.title=Clone Composite Calendar"
    })
    static void cloneCompositeCalendar(CalendarManager manager, CompositeCalendar p, ItemWsNode node) {
        CompositeGregorianCalendarPanel panel = new CompositeGregorianCalendarPanel("");
        panel.setWeightedItems(Arrays.asList(p.getCalendars()));

        DialogDescriptor dd = panel.createDialogDescriptor(Bundle.cloneCompositeCalendar_dialog_title());
        if (DialogDisplayer.getDefault().notify(dd) == NotifyDescriptor.OK_OPTION) {
            String name = panel.getCalendarName();
            List> weightedItems = panel.getWeightedItems();
            CompositeCalendar newObj = new CompositeCalendar(weightedItems.toArray(new WeightedItem[weightedItems.size()]));
            AddCalendarAction.add(manager, name, newObj);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy