Purpose: To add a simple system of membership or "donator membership"
Difficulty: -1
Assumed Knowledge: Copy and paste
Classes Modified: Client / Command classes?
For awhile now I've seen some pretty odd looking donation management systems this one is very basic, but it's an improvement over most.
Code:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
* Donation Manager; supports only lifetime memberships
*
* @author Nour
*
*/
public class DonationManager {
public DonationManager() {
donators = new HashMap<String, String>();
try {
importDonators();
} catch (Exception e) {
e.printStackTrace();
}
}
public HashMap<String, String> donators;
public static String FILE_PATH = ""; //path to donators.xml
public static boolean EXPORT_AFTER_ADDITION = true; //Recommended true, false if you have other ideas for saving
public int random(int range) {
return (int) (java.lang.Math.random() * (range + 1));
}
public boolean isDonator(String name) {
return donators.containsValue(name);
}
public String generateKey(int length) {
String choices = "abcdefghijklmnopqrstuvwxyz1234567890";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++) {
sb.append(choices.charAt(random(choices.length() - 1)));
}
return sb.toString();
}
public void exportDonators() {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_PATH+"donators.xml"));
String ENCODING = "ISO-8859-1";
bw.write("<?xml version=\"1.0\" encoding=\""+ENCODING+"\"?>");
bw.newLine();
bw.write("<DONATIONS>");
bw.newLine();
for(String s : donators.keySet()) {
bw.write("<DONATION><KEY>"+s+"</KEY><USER>"+donators.get(s)+"</USER></DONATION>");
bw.newLine();
}
bw.write("</DONATIONS>");
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addDonator(String name, int keylength) {
String key = generateKey(keylength);
if(donators.containsKey(key)) {
key = generateKey(keylength + 1);
}
donators.put(key, name);
if(EXPORT_AFTER_ADDITION)
exportDonators();
}
public void addDonator(String name) {
String key = generateKey(8);
if(donators.containsKey(key)) {
key = generateKey(8 + random(4));
}
donators.put(key, name);
if(EXPORT_AFTER_ADDITION)
exportDonators();
}
public void importDonators() throws ParserConfigurationException, SAXException, IOException {
donators.clear();
File in = new File(FILE_PATH+"donators.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(in);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("DONATION");
for (int i = 0; i < nodeLst.getLength(); i++) {
Node fstNode = nodeLst.item(i);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) fstNode;
NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("KEY");
Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
NodeList fstNm = fstNmElmnt.getChildNodes();
String key = ((Node) fstNm.item(0)).getNodeValue();
NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("USER");
Element lstNmElmnt = (Element) lstNmElmntLst.item(0);
NodeList lstNm = lstNmElmnt.getChildNodes();
String donator = ((Node) lstNm.item(0)).getNodeValue();
donators.put(key, donator);
}
}
}
}
Save that as DonationManager.java
The only other step besides that is to add your own way of creating a way of adding the donators into the donation list. You can use the addDonator method to do so.
I'll make a command for an example.
Code:
if(command.startsWith("ad")) {
String name = command.substring(3);
donationManagerObject.addDonator(name);
}