Package de.netsysit.controller

Source Code of de.netsysit.controller.ActionFactory$PolicyAction

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.netsysit.controller;

import de.netsysit.policymanager.Enums.ApplicationBase;
import de.netsysit.policymanager.Enums.PolicyLevel;
import de.netsysit.model.ApplicationModel;
import de.netsysit.model.DataBaseModel;
import de.netsysit.model.PolicyModel;
import de.netsysit.model.ReceiverListModel;
import de.netsysit.model.XMLPolicyDBWriter;
import de.netsysit.policymanager.PolicyManager;
import de.netsysit.policymanager.PolicyUtilities;
import de.netsysit.view.FallBackChooserDialog;
import de.netsysit.view.LanguageChanger;
import de.netsysit.view.LevelChooserDialog;
import de.netsysit.view.ListSelectionDialog;
import de.netsysit.view.MainFrame;
import de.netsysit.view.MappingDialog;
import de.netsysit.view.SelectDBDialog;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JOptionPane;

/**
*
* @author Ducksoul
*/
public final class ActionFactory {

    private ActionFactory() {
    }
    private static ApplicationController ac;
    private static ListController lc;
    private static PolicyController pc;
    private static Map<ActionKey, PolicyAction> map;
    private static ResourceBundle rb = PolicyUtilities.getResourceBundle();
    private static ResourceBundle mb = PolicyUtilities.getMessageBundle();
    private static DataBaseModel dbModel = PolicyManager.getPolicyModel();
    private static MappingDialog mDlg;

    public static void init() {
        map = new HashMap<ActionKey, PolicyAction>();
       
        map.put(ActionKey.APP_ADD, new PolicyAction(ActionKey.APP_ADD, rb.getString("addapp"), PolicyUtilities.createImageIcon("/images/new_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ApplicationModel app = new ApplicationModel();
                app.setId(PolicyUtilities.getNewApplicationId());
                app.setName(rb.getString("newapp") + "_" + new Integer(app.getId()).toString())
                app.setBaseA(ApplicationBase.NONE);
                app.setBaseC(ApplicationBase.NONE);
                app.setBaseI(ApplicationBase.NONE);
                if (dbModel.addApplication(app)) {
                    dbModel.setCurrentApplication(app);
                }
            }
        });
       
        map.put(ActionKey.APP_DELETE, new PolicyAction(ActionKey.APP_DELETE, rb.getString("delapp"), PolicyUtilities.createImageIcon("/images/delete_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ac.removeApplication();
            }
        });
       
        map.put(ActionKey.APP_JUMPTO, new PolicyAction(ActionKey.APP_JUMPTO, rb.getString("jump")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ac.jumpToList()
            }
        });

        map.put(ActionKey.APP_ADDLIST, new PolicyAction(ActionKey.APP_ADDLIST, rb.getString("add")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ApplicationModel app = dbModel.getCurrentApplication();
                List<ReceiverListModel> lists = new ArrayList(dbModel.getReceiverLists());
                lists.removeAll(app.getReceiverLists());

                if (lists.size() > 0) {
                    Object[] listnames = new Object[lists.size()];
                    for (int i = 0; i < lists.size(); i++) {
                        listnames[i] = lists.get(i);
                    }

                    ListSelectionDialog lsd = new ListSelectionDialog();
                    lsd.showDialog(listnames);
                    ReceiverListModel selection = (ReceiverListModel) lsd.getResult();

                    if (selection != null) {
                        app.addReceiverList(selection);
                    }
                } else if(PolicyUtilities.isShowWarnings()) {
                    mb = PolicyUtilities.getMessageBundle();
                    PolicyUtilities.showMessageDialog(mb.getString("nolistavailable"), JOptionPane.INFORMATION_MESSAGE);
                }         
            }
        });

        map.put(ActionKey.APP_DELETELIST, new PolicyAction(ActionKey.APP_DELETELIST, rb.getString("delete")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ac.deleteList();
            }
        });

        map.put(ActionKey.MAIN_OPENDB, new PolicyAction(ActionKey.MAIN_OPENDB, rb.getString("opendb")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                SelectDBDialog dlgSelectDB = new SelectDBDialog(MainFrame.getInstance(), true);
                dlgSelectDB.setVisible(true);
            }
        });

        map.put(ActionKey.MAIN_SAVE, new PolicyAction(ActionKey.MAIN_SAVE,  rb.getString("save"), PolicyUtilities.createImageIcon("/images/save_24.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                XMLPolicyDBWriter writer = new XMLPolicyDBWriter();
                try {                                            
                    writer.savePolicyDB(dbModel.getFilePath());
                } catch (Exception ex) {
                    Logger.getLogger(ActionFactory.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
       
        map.put(ActionKey.MAIN_SAVEAS, new PolicyAction(ActionKey.MAIN_SAVEAS,  rb.getString("saveas"), PolicyUtilities.createImageIcon("/images/save_24.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                XMLPolicyDBWriter writer = new XMLPolicyDBWriter();
                try {                  
                    String path = PolicyUtilities.showSaveDialog();
                    writer.savePolicyDB(path);
                } catch (Exception ex) {
                    Logger.getLogger(ActionFactory.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });       

        map.put(ActionKey.MAIN_ADD, new PolicyAction(ActionKey.MAIN_ADD, rb.getString("addapp"), PolicyUtilities.createImageIcon("/images/new_24.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                switch (dbModel.getActiveItem()) {
                    case APP:
                        ApplicationModel app = new ApplicationModel();
                        app.setId(PolicyUtilities.getNewApplicationId());
                        app.setName(rb.getString("newapp") + "_" + new Integer(app.getId()).toString());
                        app.setBaseA(ApplicationBase.NONE);
                        app.setBaseC(ApplicationBase.NONE);
                        app.setBaseI(ApplicationBase.NONE);
                        if (dbModel.addApplication(app)) {
                            dbModel.setCurrentApplication(app);
                        }
                        break;
                    case LIST:
                        ReceiverListModel list = new ReceiverListModel();
                        list.setId(PolicyUtilities.getNewReceiverListId());
                        list.setName(rb.getString("newlist") + "_" + new Integer(list.getId()).toString());
                       
                        if (dbModel.addReceiverList(list)) {
                            dbModel.setCurrentReceiverList(list);
                        }
                        break;
                    case POLICY:
                        LevelChooserDialog lcD = new LevelChooserDialog();
                        lcD.showDialog();
                        PolicyLevel result = lcD.getResult();
                        if(result != PolicyLevel.NONE) {
                            dbModel.setActiveLevel(result);
                            pc.createPolicy();
                        }
                        break;
                }
            }
        });

        map.put(ActionKey.MAIN_DELETE, new PolicyAction(ActionKey.MAIN_DELETE, rb.getString("delapp"), PolicyUtilities.createImageIcon("/images/delete_24.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                switch (dbModel.getActiveItem()) {
                    case APP:
                        ac.removeApplication();
                        break;
                    case LIST:
                        lc.removeReceiverList();
                        break;
                    case POLICY:
                        pc.removePolicy(dbModel.getActiveLevel());
                        break;
                }               
            }
        });
       
        map.put(ActionKey.MAIN_MAPPING, new PolicyAction(ActionKey.MAIN_MAPPING, rb.getString("mapping"), PolicyUtilities.createImageIcon("/images/delete_24.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(mDlg == null) {
                    mDlg = new MappingDialog();
                    mDlg.showDialog();
                } else {
                    mDlg.refresh();
                    mDlg.showDialog();
                }
               
                if(!mDlg.getResult()) {
                    if(PolicyUtilities.isShowWarnings()) {
                        mb = PolicyUtilities.getMessageBundle();
                        PolicyUtilities.showMessageDialog(mb.getString("mappingwarning"), JOptionPane.WARNING_MESSAGE);
                    }
                }
            }
        })
       
        map.put(ActionKey.LIST_ADD, new PolicyAction(ActionKey.LIST_ADD, rb.getString("addlist"), PolicyUtilities.createImageIcon("/images/new_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                ReceiverListModel list = new ReceiverListModel();
                list.setId(PolicyUtilities.getNewReceiverListId());
                list.setName(rb.getString("newlist") + "_" + new Integer(list.getId()).toString());

                if (dbModel.addReceiverList(list)) {
                    dbModel.setCurrentReceiverList(list);
                }
            }
        });  
       
        map.put(ActionKey.LIST_DELETE, new PolicyAction(ActionKey.LIST_DELETE, rb.getString("dellist"), PolicyUtilities.createImageIcon("/images/delete_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                lc.removeReceiverList();
            }
        });

        map.put(ActionKey.LIST_ADDRECEIVER, new PolicyAction(ActionKey.LIST_ADDRECEIVER, rb.getString("add")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                lc.addReceiver();
            }
        });

        map.put(ActionKey.LIST_RECEIVEREDIT, new PolicyAction(ActionKey.LIST_RECEIVEREDIT, rb.getString("edit")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                lc.editReceiver();
            }
        });
        map.put(ActionKey.LIST_RECEIVERDELETE, new PolicyAction(ActionKey.LIST_RECEIVERDELETE, rb.getString("delete")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                lc.deleteReceiver();
            }
        });
        map.put(ActionKey.POLICY_ADDA, new PolicyAction(ActionKey.POLICY_ADDA, rb.getString("newpolicy"), PolicyUtilities.createImageIcon("/images/new_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                dbModel.setActiveLevel(PolicyLevel.A);
                pc.createPolicy();
            }
        });
       
        map.put(ActionKey.POLICY_ADDC, new PolicyAction(ActionKey.POLICY_ADDC, rb.getString("newpolicy"), PolicyUtilities.createImageIcon("/images/new_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                dbModel.setActiveLevel(PolicyLevel.C);
                pc.createPolicy();
            }
        });
       
        map.put(ActionKey.POLICY_ADDI, new PolicyAction(ActionKey.POLICY_ADDI, rb.getString("newpolicy"), PolicyUtilities.createImageIcon("/images/new_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                dbModel.setActiveLevel(PolicyLevel.I);
                pc.createPolicy();
            }
        });
       
        map.put(ActionKey.POLICY_DELETEA, new PolicyAction(ActionKey.POLICY_DELETEA, rb.getString("delpolicy"), PolicyUtilities.createImageIcon("/images/delete_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                pc.removePolicy(PolicyLevel.A);
            }
        });  
       
        map.put(ActionKey.POLICY_DELETEC, new PolicyAction(ActionKey.POLICY_DELETEC, rb.getString("delpolicy"), PolicyUtilities.createImageIcon("/images/delete_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                pc.removePolicy(PolicyLevel.C);
            }
        });        

        map.put(ActionKey.POLICY_DELETEI, new PolicyAction(ActionKey.POLICY_DELETEI, rb.getString("delpolicy"), PolicyUtilities.createImageIcon("/images/delete_16.png")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                pc.removePolicy(PolicyLevel.I);
            }
        });        
       
        map.put(ActionKey.POLICY_CHOOSEFB, new PolicyAction(ActionKey.POLICY_CHOOSEFB, rb.getString("choosefallback")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                PolicyModel policy = dbModel.getCurrentPolicy();
                List<PolicyModel> currentPolicies = null;
                PolicyLevel level = dbModel.getActiveLevel();

                if (level == PolicyLevel.A) {
                    currentPolicies = dbModel.getAPolicies();
                } else if (level == PolicyLevel.C) {
                    currentPolicies = dbModel.getCPolicies();
                } else if (level == PolicyLevel.I) {
                    currentPolicies = dbModel.getIPolicies();
                }

                List<PolicyModel> list = new ArrayList<PolicyModel>(currentPolicies);
                list.remove(policy); // die darf sowieso nicht drin sein
                for (Iterator<PolicyModel> it = list.iterator(); it.hasNext();) {
                    PolicyModel next = it.next();
                    if (!PolicyUtilities.isValidPolicyFallback(policy, next)) {
                        it.remove(); // entferne alle invaliden
                    } else {
                            // prüfen, ob Policy schon Elternteil einer anderen Policy ist
                        for (int i=0; i<currentPolicies.size(); i++) {
                            PolicyModel ref = currentPolicies.get(i);
                            if(!ref.equals(next))
                                if(PolicyUtilities.isParentPolicy(ref, next))
                                    it.remove();
                        }
                    }
                }
               
                PolicyModel p = PolicyUtilities.getDummyPolicy();

                if ((list.isEmpty()) && (policy.getFallback() == null)) {
                    if(PolicyUtilities.isShowWarnings()) {
                        mb = PolicyUtilities.getMessageBundle();
                        PolicyUtilities.showMessageDialog(mb.getString("nofbavailable"), JOptionPane.INFORMATION_MESSAGE);
                   
                } else {
                    list.add(p);
                    Object[] policies = list.toArray();

                    FallBackChooserDialog dlg = new FallBackChooserDialog();
                    dlg.showDialog(policies);
                    Object result = dlg.getResult();
                    if (result != null) {
                        PolicyModel fb = (PolicyModel) result;
                        if(fb.equals(p))
                            dbModel.getCurrentPolicy().setFallback(null);
                        else
                            dbModel.getCurrentPolicy().setFallback((PolicyModel) dlg.getResult());

                        PolicyUtilities.setPolicyRanks(currentPolicies, true);
                        pc.refreshPolicyLists();
                    }
                }
            }
        });
       
        map.put(ActionKey.LANG_DE, new PolicyAction(ActionKey.LANG_DE, rb.getString("german")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                Locale loc = new Locale("de", "DE");
                PolicyUtilities.setLoc(loc);
                LanguageChanger langChanger = MainFrame.getLangChanger();
                langChanger.setRb(PolicyUtilities.getResourceBundle());
                langChanger.changeLanguage();
            }
        });
       
        map.put(ActionKey.LANG_EN, new PolicyAction(ActionKey.LANG_EN, rb.getString("english")) {

            @Override
            public void actionPerformed(ActionEvent e) {
                Locale loc = new Locale("en", "GB");
                PolicyUtilities.setLoc(loc);
                LanguageChanger langChanger = MainFrame.getLangChanger();
                langChanger.setRb(PolicyUtilities.getResourceBundle());
                langChanger.changeLanguage();
            }
        });       
    }
   
   

    public static PolicyAction get(ActionKey key) {
        return map.get(key);
    }

    public static abstract class PolicyAction extends AbstractAction {

        private ActionKey aKey;
        private String name;

        public PolicyAction(ActionKey aKey, String actionName) {
            this.aKey = aKey;
            putValue(ACTION_COMMAND_KEY, aKey.name());
            putValue(Action.NAME, actionName);
            setEnabled(true);
        }

        public PolicyAction(ActionKey aKey, String name, Icon icon) {
            this.aKey = aKey;
            this.name = name;
            putValue(ACTION_COMMAND_KEY, aKey.name());
            putValue(Action.NAME, name);
            putValue(Action.SMALL_ICON, icon);
        }

        public ActionKey getActionKey() {
            return aKey;
        }
       
        public String getName() {
            return name;
        }
       
        public void setName(String name) {
            putValue(Action.NAME, name);
        }
    }

    public enum ActionKey {

        APP_JUMPTO,
        APP_ADDLIST,
        APP_DELETELIST,
        APP_ADD,
        APP_DELETE,
        MAIN_OPENDB,
        MAIN_SAVE,
        MAIN_SAVEAS,
        MAIN_ADD,
        MAIN_DELETE,
        MAIN_MAPPING,
        POLICY_CHOOSEFB,
        POLICY_ADDA,
        POLICY_ADDC,
        POLICY_ADDI,
        POLICY_DELETEA,
        POLICY_DELETEC,
        POLICY_DELETEI,
        LIST_RECEIVEREDIT,
        LIST_ADDRECEIVER,
        LIST_RECEIVERDELETE,
        LIST_ADD,
        LIST_DELETE,
        LANG_DE,
        LANG_EN;
    }

    public static void setAc(ApplicationController ac) {
        ActionFactory.ac = ac;
    }

    public static void setLc(ListController lc) {
        ActionFactory.lc = lc;
    }

    public static void setPc(PolicyController pc) {
        ActionFactory.pc = pc;
    }
}
TOP

Related Classes of de.netsysit.controller.ActionFactory$PolicyAction

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.