First, I define a group interface, in addition to inheriting the user's approach, GetUsers, getSubGroup. Code is shown later. Users must set their roles and groups in addition to a variety of different properties. .
Then define an AbstractGroup, he inherits the Group and AbstractUser and implements two methods defined by the Group interface. Users can inherit the AbstractGroup to handle the properties you want to define according to the implementation situation. (Because users of each system will have Different attributes, so keep abstract classes for users their own extensions). As long as initialization variables Description, Name, Group, ID, Prop, Role, PropMap, Subgroup, User.
Finally, a class XMLGroup is defined to implement a Group for a Group for a Group for general users. It is not recommended to use XMLGroup directly, because later versions may overwrite the class. If you want to use, you can rename it You can.
This part involves a resourcelib class, which is in the class that I defined by the storage of various resource configurations, which can be used directly.
====================== group.java ========================= ======
Package org.fswan.Permission;
Public Interface Group Extends User
{
/ **
* Get all users under the group
* @Return user array
* /
Public user [] getusers ();
/ **
* Get the group of subordinates
* @return groups of arrays
* /
Public group [] getSubgroup ();
}
======================= ibstractgroup =========================== =========
Package org.fswan.Permission;
Import Org.fswan.Identity;
Import org.fswan.workflow.exception.IdentityMappingerror;
Public Class AbstractGroup Extends AbstractUser IMPLEMENTS Group
{
Protected Identity [] Subgroup;
Protected Identity [] User;
/ * (non-javadoc)
* @see org.fswan.Permission.group # getSubGroup ()
* /
Public group [] getSubgroup ()
{
Group [] groups = new group [subgroup.length];
For (int i = 0; i { Try { Groups [i] = (group) Subgroup [i] .newinstance ();} catch (IdentityMappinger E) { E.PrintStackTrace (); } } Return Groups; } / * (non-javadoc) * @see org.fswan.permission.group # getUsers () * / Public user [] getUsers () { User [] Users = new user [user.length]; For (int i = 0; i { Try { User [I] = (user) user [i] .newinstance (); } catch (IdentityMAppinger E) { E.PrintStackTrace (); } } Return User; } Public String Tostring () { String retstr = id.getidname (); Retstr = ":" Name; RetStr = "" Description; Return Retstr; } } ============================== xmlgroup.java ================= ========== Package org.fswan.Permission; Import java.util.arraylist; Import java.util.properties; Import javax.xml.parsers.documentBuilderFactory; Import Org.fswan.Identity; Import Org.fswan.IdentityImpl; Import org.fswan.implementIndIndIndity; Import Org.fswan.ResourcesLib; Import org.w3c.dom.document; Import Org.w3c.dom.Element; Import org.w3c.dom.nodeelist; Public Class Xmlgroup Extends AbstractGroup Implements ImplementIndIndity { / ** * Define the tag of the group in XML * / Public Static Final String Group = "Group"; Public Object NewInstance (Identity ID) { ArrayList Sources = ResourceLib.getxmlResource (); For (int i = 0; i { Try { Document Doc = DocumentBuilderFactory.newInstance (). NewDocumentBuilder (). Parse (Sources.get (i) .tostring ()); Nodelist nl = doc.getElementsBytagname (Group); for (int J = 0; j { Element Tempel = (Element) nl.Item (j); String idstr = Tempel.getaTribute ("ID"); IF (idStr! = null&&! idstr.equals (")) { IF (idStr.equals (id.getidname ()))) { THIS.ID = New IdentityImpl (Identity.Switch, Identity.xmlGroup, IDSTR); // Load name Nodelist Tempnl = Tempel.GetElementsBytagname ("Name"); Name = tempnl.Item (0) .GetchildNodes (). Item (0) .GetnodeValue (); // Load Description Tempnl = Tempel.getElementsBytagname ("description"); Description = tempnl.item (0) .GetIldNodes (). Item (0) .GetnodeValue (); // Load the parent group Tempnl = Tempel.GtelementsBytagname ("ParentGroup"); Identity [] groups = new identity [tempnl.getLength ()]; For (IGROUP = 0; Igroup { Tempel = (Element) Tempnl.Item (iGroup); Groups [igroup] = new identityImpl (Identity.Group, Identity.xmlGroup, Tempel.getaTRibute ("ID")); } This.SubGroup = groups; // Load role Tempnl = Tempel.GtelementsBytagname ("role"); Identity [] roles = new identity [tempnl.getLength ()]; For (int Irole = 0; Irole { Tempel = (Element) Tempnl.Item (Irole); Roles [Irole] = New IdentityImpl (Identity.Role, Identity.xmlrole, Tempel.getaTAttribute ("ID")); } THIS.ROLE = Roles; // Load attribute THIS.PROP = New property (); Tempnl = Tempel.GtelementsBytagname ("property"); IF (TempnL! = NULL) For (int K = 0; K { ELEMENT TEMPELEMENT = (Element) TEMPNL.Item (K); THIS.Prop.SetProperty ("name"), Templement.getaTribute ("Value");} // Add a population Tempnl = Tempel.getElementsBytagname ("Subgroup"); IF (TempnL! = NULL) { Subgroup = new identity [tempnl.getLength ()]; For (int K = 0; k { ELEMENT TEMPELEMENT = (Element) TEMPNL.Item (K); Subgroup [k] = new identityImpl (Identity.Group, Identity.xmlgroup, Templement.getaTribute ("ID")); } } / / Load user Tempnl = Tempel.getElementsBytagname ("User"); IF (TempnL! = NULL) { User = new identity [tempnl.getLength ()]; For (int K = 0; k { ELEMENT TEMPELEMENT = (Element) TEMPNL.Item (K); User [k] = new IdentityImpl (Identity.user, Identity.xmluser, Templement.getaTribute ("ID")); } } Return this; } } } } catch (Exception E) { E.PrintStackTrace (); } } Return NULL; } } ================================================================================================================================================================== Group> ========================= ================================================================================================================================================= xs: annotation> xs: sequence> xs: extension> xs: complextence> xs: complexType>