Package de.netsysit.model

Source Code of de.netsysit.model.XMLPolicyReader

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

import de.netsysit.policymanager.Enums.ApplicationBase;
import de.netsysit.policymanager.Enums.PolicyLevel;
import de.netsysit.policymanager.PolicyUtilities;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.XMLEvent;

/**
*
* @author ducksoul
*/
public class XMLPolicyReader implements PolicyReader {

    private List<ApplicationModel> applications = new ArrayList();
    private List<ReceiverListModel> receiverLists = new ArrayList();
    private List<PolicyModel> aPolicies = new ArrayList();
    private List<PolicyModel> cPolicies = new ArrayList();
    private List<PolicyModel> iPolicies = new ArrayList();
    private LevelModel baseLow = new LevelModel();
    private LevelModel baseNormal = new LevelModel();
    private LevelModel baseHigh = new LevelModel();
   
    private String node = "";
    private String policyLevel = "";
    private String level = "";
    private int[] lowLevel = new int[3];
    private int[] normalLevel = new int[3];
    private int[] highLevel = new int[3];
    private Map<PolicyModel, Integer> aFallBackMap = new HashMap();
    private Map<PolicyModel, Integer> cFallBackMap = new HashMap();
    private Map<PolicyModel, Integer> iFallBackMap = new HashMap();
   
    private Set<Integer> appKeys = new TreeSet();
    private Set<Integer> receiverListKeys = new TreeSet();
    private Set<Integer> policyAKeys = new TreeSet();
    private Set<Integer> policyCKeys = new TreeSet();
    private Set<Integer> policyIKeys = new TreeSet();

    public void loadPolicy(File f, DataBaseModel m) {
        try {
            // zuerst eine neue XMLInputFactory erstellen
            XMLInputFactory inputFactory = XMLInputFactory.newInstance();

            // einen neuen eventReader einrichten
            InputStream in = new FileInputStream(f);
            XMLEventReader eventReader = inputFactory.createXMLEventReader(in);

            // Objekte erzeugen
            ReceiverListModel pReceiverList = null;
            ReceiverModel pReceiver = null;
            ApplicationModel pApplication = null;
            PolicyModel pPolicy = null;

            // das XML-Dokument lesen
            while (eventReader.hasNext()) {
                XMLEvent event = eventReader.nextEvent();

                if (event.isStartElement()) {
                    String localpart = event.asStartElement().getName().getLocalPart();
                    if (localpart.equals("list")) {
                        node = "list";
                        pReceiverList = new ReceiverListModel();
                    } else if (localpart.equals("receiver")) {
                        node = "receiver";
                        pReceiver = new ReceiverModel();
                    } else if (localpart.equals("app")) {
                        node = "app";
                        pApplication = new ApplicationModel();
                    } else if (localpart.equals("policy")) {
                        node = "policy";
                        pPolicy = new PolicyModel();
                    } else if (localpart.equals("level1")) {
                        level = "low";
                    } else if (localpart.equals("level2")) {
                        level = "normal";
                    } else if (localpart.equals("level3")) {
                        level = "high";
                    } else if (localpart.equals("id")) {
                        event = eventReader.nextEvent();

                        if (node.equals("list")) {
                            pReceiverList.setId(Integer.parseInt(event.asCharacters().getData()));
                        } else if (node.equals("receiver")) {
                            pReceiver.setId(Integer.parseInt(event.asCharacters().getData()));
                        } else if (node.equals("app")) {
                            pApplication.setId(Integer.parseInt(event.asCharacters().getData()));
                        } else if (node.equals("policy")) {
                            pPolicy.setId(Integer.parseInt(event.asCharacters().getData()));
                        }
                    } else if (localpart.equals("name")) {
                        event = eventReader.nextEvent();

                        if (node.equals("list")) {
                            pReceiverList.setName(event.asCharacters().getData());
                        } else if (node.equals("receiver")) {
                            pReceiver.setName(event.asCharacters().getData());
                        } else if (node.equals("app")) {
                            pApplication.setName(event.asCharacters().getData());
                        } else if (node.equals("policy")) {
                            pPolicy.setName(event.asCharacters().getData());
//                            if (policyLevel.equals("a")) {
//                                pPolicy.setLevel(0);
//                            } else if (policyLevel.equals("c")) {
//                                pPolicy.setLevel(1);
//                            } else if (policyLevel.equals("i")) {
//                                pPolicy.setLevel(2);
//                            }
                        }
                    } else if (localpart.equals("a-policies")) {
                        policyLevel = "a";
                    } else if (localpart.equals("c-policies")) {
                        policyLevel = "c";
                    } else if (localpart.equals("i-policies")) {
                        policyLevel = "i";
                    } else if (localpart.equals("a")) {
                        event = eventReader.nextEvent();
                        if (level.equals("low")) {
                            lowLevel[0] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("normal")) {
                            normalLevel[0] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("high")) {
                            highLevel[0] = Integer.parseInt(event.asCharacters().getData());
                        }
                    } else if (localpart.equals("c")) {
                        event = eventReader.nextEvent();
                        if (level.equals("low")) {
                            lowLevel[1] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("normal")) {
                            normalLevel[1] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("high")) {
                            highLevel[1] = Integer.parseInt(event.asCharacters().getData());
                        }
                    } else if (localpart.equals("i")) {
                        event = eventReader.nextEvent();
                        if (level.equals("low")) {
                            lowLevel[2] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("normal")) {
                            normalLevel[2] = Integer.parseInt(event.asCharacters().getData());
                        } else if (level.equals("high")) {
                            highLevel[2] = Integer.parseInt(event.asCharacters().getData());
                        }
                    } else if (localpart.equals("expectRequestEncrypted")) {
                        event = eventReader.nextEvent();
                        pApplication.setExpectRequestEncrypted(PolicyUtilities.intToBool(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("a-level")) {
                        event = eventReader.nextEvent();
                        pApplication.setBaseA(intToApplicationBase(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("c-level")) {
                        event = eventReader.nextEvent();
                        pApplication.setBaseC(intToApplicationBase(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("i-level")) {
                        event = eventReader.nextEvent();
                        pApplication.setBaseI(intToApplicationBase(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("listID")) {
                        event = eventReader.nextEvent();
                        pApplication.addReceiverList(getReceiverListModel(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("fallback")) {
                        event = eventReader.nextEvent();
                        if(policyLevel.equals("a")) {
                            aFallBackMap.put(pPolicy, new Integer(Integer.parseInt(event.asCharacters().getData())));
                        } else if(policyLevel.equals("c")) {
                            cFallBackMap.put(pPolicy, new Integer(Integer.parseInt(event.asCharacters().getData())));
                        } else if(policyLevel.equals("i")) {
                            iFallBackMap.put(pPolicy, new Integer(Integer.parseInt(event.asCharacters().getData())));
                        }
                    } else if (localpart.equals("action")) {
                        event = eventReader.nextEvent();
                        if(policyLevel.equals("a")) {
                           pPolicy.setLevel(PolicyLevel.A);
                        } else if(policyLevel.equals("c")) {
                            Map<ActionTupel, String> actions = m.getCActions();
                            pPolicy.setAction(new ActionModel(actions, event.asCharacters().getData()));
                            pPolicy.setLevel(PolicyLevel.C);
                        } else if(policyLevel.equals("i")) {
                            Map<ActionTupel, String> actions = m.getIActions();
                            pPolicy.setAction(new ActionModel(actions, event.asCharacters().getData()));
                            pPolicy.setLevel(PolicyLevel.I);
                        }                       
                    } else if (localpart.equals("useToken")) {
                        event = eventReader.nextEvent();
                        pPolicy.setUseToken(PolicyUtilities.intToBool(Integer.parseInt(event.asCharacters().getData())));
                    } else if (localpart.equals("rank")) {
                        event = eventReader.nextEvent();
                        pPolicy.setRank(Integer.parseInt(event.asCharacters().getData()));
                    }
                } else if (event.isEndElement()) {
                    String localpart = event.asEndElement().getName().getLocalPart();
                    if (localpart.equals("receiver")) {
//                                        System.out.println(preceiver.getName());
                        pReceiverList.addReceiver(pReceiver);
                    } else if (localpart.equals("list")) {
                        receiverLists.add(pReceiverList);
//                                        System.out.println(receiverLists.get(receiverLists.size()-1).getName());
//                                        System.out.println(receiverLists.get(receiverLists.size()-1).getId());
//                                        for (int i=0; i < receiverLists.get(receiverLists.size()-1).getReceivers().size(); i++) {
//                                            System.out.println(receiverLists.get(receiverLists.size()-1).getReceivers().get(i).toString());
////                                          System.out.println(policies.get(policies.size()-1).getReceivers().get(i).getId());
////                                          System.out.println(policies.get(policies.size()-1).getReceivers().get(i).getName());
//                                        }
//                                        System.out.println("============================================================");
                    } else if (localpart.equals("app")) {
                        applications.add(pApplication);
                    } else if (localpart.equals("policy")) {
                        if (policyLevel.equals("a")) {
                            aPolicies.add(pPolicy);
                        } else if (policyLevel.equals("c")) {
                            cPolicies.add(pPolicy);
                        } else if (policyLevel.equals("i")) {
                            iPolicies.add(pPolicy);
                        }
                    }
                }
            }
           
            setFallBacks(aPolicies, aFallBackMap);
            setFallBacks(cPolicies, cFallBackMap);
            setFallBacks(iPolicies, iFallBackMap);
            PolicyUtilities.setPolicyRanks(aPolicies, false);
            PolicyUtilities.setPolicyRanks(cPolicies, false);
            PolicyUtilities.setPolicyRanks(iPolicies, false);
           
            setBase(lowLevel, baseLow);
            setBase(normalLevel, baseNormal);
            setBase(highLevel, baseHigh);
           
            for(ApplicationModel am : applications)
                if(!appKeys.add(new Integer(am.getId())))
                    System.out.println("Doppelte App Id");
           
            for(ReceiverListModel rlm : receiverLists)
                if(!receiverListKeys.add(new Integer(rlm.getId())))
                    System.out.println("Doppelte ReceiverList Id");
           
            for(PolicyModel pmA : aPolicies)
                if(!policyAKeys.add(new Integer(pmA.getId())))
                    System.out.println("Doppelte APolicy Id");
           
            for(PolicyModel pmC : cPolicies)
                if(!policyCKeys.add(new Integer(pmC.getId())))
                    System.out.println("Doppelte CPolicy Id");
           
            for(PolicyModel pmI : iPolicies)
                if(!policyIKeys.add(new Integer(pmI.getId())))
                    System.out.println("Doppelte IPolicy Id");
           
            for(ReceiverListModel rlm : receiverLists)
                if(!checkReceiverIds(rlm))
                    System.out.println("Doppelte Id in den Empfänger der Liste " + rlm.getName());
           
           
            m.setAppKeys(appKeys);
            m.setReceiverListKeys(receiverListKeys);
            m.setPolicyAKeys(policyAKeys);
            m.setPolicyCKeys(policyCKeys);
            m.setPolicyIKeys(policyIKeys);
            m.setApplications(applications);
            m.setReceiverLists(receiverLists);
            m.setAPolicies(aPolicies);
            m.setCPolicies(cPolicies);
            m.setIPolicies(iPolicies);
            m.setBaseLow(baseLow);
            m.setBaseNormal(baseNormal);
            m.setBaseHigh(baseHigh);
            PolicyUtilities.setSystemState(PolicyUtilities.createSystemStateString(m));

        } catch (Exception e) {
        }
    }
   
    private void setBase(int[] pIds, LevelModel level) {
        level.setABasePolicy( getPolicy(aPolicies, pIds[0]));
        level.setCBasePolicy( getPolicy(cPolicies, pIds[1]));
        level.setIBasePolicy( getPolicy(iPolicies, pIds[2]));
    }
   
    private ApplicationBase intToApplicationBase(int i) {
        switch(i) {
            case 1: return ApplicationBase.LOW;
            case 2: return ApplicationBase.NORMAL;
            case 3: return ApplicationBase.HIGH;
            default: return ApplicationBase.NONE;
        }
    }
   
    private ReceiverListModel getReceiverListModel(int id) {
        for(int i=0; i<receiverLists.size(); i++) {
            ReceiverListModel rm = receiverLists.get(i);
            if(rm.getId() == id) {
                return rm;
            }
        }
        return null;
    }
   
    private void setFallBacks(List<PolicyModel> policies, Map<PolicyModel, Integer> map) {
        for(int i=0; i<policies.size(); i++) {
            PolicyModel aPolicy = policies.get(i);
            Integer fallBack = map.get(aPolicy);
            if ((fallBack != null) && (fallBack.intValue() != -1)) {
                PolicyModel fbPolicy = getPolicy(policies, fallBack.intValue());
                if(fbPolicy != null) {
                    aPolicy.setFallback(fbPolicy);
                } else {
                    aPolicy.setFallback(null);
                }
            } else {
                aPolicy.setFallback(null);
            }
        }
    }
   
    private PolicyModel getPolicy(List<PolicyModel> policies, int id) {
        for(int i=0; i<policies.size(); i++) {
            PolicyModel pm = policies.get(i);
            if(pm.getId() == id) {
                return pm;
            }
        }
        return null;   
    }
   
    private boolean checkReceiverIds(ReceiverListModel rlm) {
        List<ReceiverModel> receivers = rlm.getReceivers();
        Set<Integer> ids = new HashSet<Integer>();
       
        for(ReceiverModel rm : receivers)
            if(!ids.add(rm.getId()))
                return false;
       
        return true;
    }
}
TOP

Related Classes of de.netsysit.model.XMLPolicyReader

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.