⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 service.java

📁 分布式议程管理系统
💻 JAVA
字号:
/**
 * 
 */
package sysu.agenda.ctrl;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;

import sysu.agenda.model.Meeting;
import sysu.agenda.model.User;
import sysu.agenda.command.*;
import sysu.agenda.exception.ParameterException;

/**
 * @author Administrator
 * 
 */
public class Service {
	public Vector<User> vecUser = new Vector<User>();
	public Vector<Meeting> vecMeeting = new Vector<Meeting>();
	public Vector<String> vecName = new Vector<String>();
	public HashMap<String, Class<?>> vecCommand = new HashMap<String, Class<?>>();
	private String path;

	public void clear() {
		this.vecUser.clear();
		this.vecMeeting.clear();
	}

	/**
	 * 
	 */
	public Service() {
		// TODO Auto-generated constructor stub
		this.setPath(System.getProperty("user.dir"));
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// try {
		// Service.getInstance().loadName();
		// } catch (MalformedURLException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// } catch (ClassNotFoundException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// for (String str : Service.getInstance().vecName)
		// System.out.println(str);
		try {
			Service.getInstance().loadCommand();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		for (int i = 0; i < Service.getInstance().vecCommand.size(); i++)
			System.out.println(Service.getInstance().vecCommand.get(Service
					.getInstance().vecName.get(i)));
	}

	/**
	 * static class for Singleton design pattern, instance of Service will be
	 * created when the first time you make a call to Service.getInstance
	 * 
	 * @author Cyberpet
	 * @see Service#getInstance()
	 */
	static class ServiceSingletonHolder {
		static Service instance = new Service();
	}

	/**
	 * get the only instance of Service
	 * 
	 * @return Service
	 * @see Service
	 */
	public static Service getInstance() {
		return ServiceSingletonHolder.instance;
	}

	/**
	 * @param path
	 *            the path to set
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * @return the path
	 */
	public String getPath() {
		return path;
	}

	public String getUsers() {
		String str = new String();
		for (User user : this.vecUser)
			str += user.toString();
		return str;
	}

	public String getMeetings() {
		String str = new String();
		for (Meeting mt : this.vecMeeting)
			str += mt.toString() + "\n";
		return str;
	}

	public void loadCommand() throws MalformedURLException,
			ClassNotFoundException {
		File path = new File(this.path + "\\bin\\sysu\\agenda\\command");
		String[] files = path.list(new FilterHelper());
		for (String str : files) {
			String tmp = InputHelper.getInstance().trimExtension(str);
			URL url = path.toURI().toURL();
			// initialize url class loader
			ClassLoader loader = new URLClassLoader(new URL[] { url });
			Class<?> cls = loader.loadClass("sysu.agenda.command." + tmp);
			if (ICommand.class.isAssignableFrom(cls)) {
				/**
				 * create instance of the loaded class
				 */
				// Object obj = cls.newInstance();
				this.vecCommand.put(tmp.toLowerCase(), cls);
				this.vecName.add(tmp.toLowerCase());
			}
		}
	}

	public void loadName() throws MalformedURLException, ClassNotFoundException {
		File path = new File(this.path + "\\bin\\sysu\\agenda\\command");
		String[] files = path.list(new FilterHelper());
		for (String str : files) {
			String tmp = InputHelper.getInstance().trimExtension(str);
			URL url = path.toURI().toURL();
			// initialize url class loader
			ClassLoader loader = new URLClassLoader(new URL[] { url });
			Class<?> cls = loader.loadClass("sysu.agenda.command." + tmp);
			if (ICommand.class.isAssignableFrom(cls))
				this.vecName.add(tmp.toLowerCase());
		}
	}

	public Meeting getMeetingByID(String user, String title) {
		for (Meeting meet : this.vecMeeting)
			if (meet.getUser().compareTo(user) == 0
					&& meet.getTitle().compareTo(title) == 0)
				return meet;
		return null;
	}

	public boolean isContainedUser(String name) {
		for (User user : this.vecUser)
			if (user.getName().compareTo(name) == 0)
				return true;
		return false;
	}

	public boolean login(String name, String psw) {
		for (User user : this.vecUser)
			if (user.getName().compareTo(name) == 0
					&& user.getPassword().compareTo(psw) == 0)
				return true;
		return false;
	}

	public boolean isDateValid(Meeting meeting) {
		boolean res = true;
		for (Meeting met : this.vecMeeting)
			if (met.getUser().compareTo(meeting.getUser()) == 0
					|| met.getUser().compareTo(meeting.getOther()) == 0)
				res &= met.getStart().after(meeting.getEnd())
						|| met.getEnd().before(meeting.getStart());
		return res;
	}

	public boolean addMeeting(Meeting meet) throws ParameterException {
		if (this.getMeetingByID(meet.getUser(), meet.getTitle()) == null
				&& this.isDateValid(meet))
			return this.vecMeeting.add(meet);
		else
			throw new ParameterException(
					"Users or date conflict while adding meeting\n");
	}
	
	public Vector<Meeting> getMeetingByDate(String name, Date start, Date end) {
		Vector<Meeting> tmp = new Vector<Meeting>();
		for (Meeting met : this.vecMeeting)
			if ((met.getUser().compareTo(name) == 0 || met.getOther()
					.compareTo(name) == 0)
					&& !(met.getStart().after(end) || met.getEnd()
							.before(start)))
				tmp.add(met);
		return tmp;
	}
	
	public boolean removeMeetingByName(String name) {
		boolean res = false;
		Vector<Meeting> tmp = getMeetingByUserName(name);
		//tmp.addAll(0, MeetingManager.getInstance().getMeetingByOtherName(name));
		for (Meeting meet : tmp)
			res &= this.vecMeeting.remove(meet);
		return res;
	}
	
	public Vector<Meeting> getMeetingByUserName(String name) {
		Vector<Meeting> tmp = new Vector<Meeting>();
		for (Meeting meet : this.vecMeeting)
			if (meet.getUser().compareTo(name) == 0)
				tmp.add(meet);
		return tmp;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -