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

📄 filemanager.java

📁 Unix下基于Web的管理工具
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	mid = add_panel(mid, per);	// Create ownership section	Panel own = new LinedPanel(filemgr.text("info_own")),	      ol = new Panel(), or = new Panel();	setup_leftright(own, ol, or);	add_item(filemgr.text("info_user"),		 user = new TextField(file.user, 10), ol, or);	if (file.type != 0) {		add_item(filemgr.text("info_setuid"),			 setuid = new Checkbox(filemgr.text("info_setuid2")),			 ol, or);		setuid.setState((file.perms & 0x800) != 0);		}	add_item(filemgr.text("info_group"),		 group = new TextField(file.group, 10), ol, or);	if (file.type == 0)		add_item(filemgr.text("info_setgid"),		  setgid = new Checkbox(filemgr.text("info_setgid2")), ol, or);	else		add_item(filemgr.text("info_setgid"),		  setgid = new Checkbox(filemgr.text("info_setgid3")), ol, or);	setgid.setState((file.perms & 0x400) != 0);	mid = add_panel(mid, own);	if (file.type == 0) {		// Create recursion section		Panel rec = new LinedPanel(filemgr.text("info_apply"));		rec.setLayout(new BorderLayout());		rec_mode = new Choice();		for(int i=1; i<=3; i++)			rec_mode.addItem(filemgr.text("info_apply"+i));		rec.add("Center", rec_mode);		mid = add_panel(mid, rec);		}	pack();	show();	}	Panel add_panel(Panel p, Component c)	{	p.add("North", c);	Panel np = new Panel();	np.setLayout(new BorderLayout());	p.add("Center", np);	return np;	}	public void click(CbButton b)	{	if (b == save_b) {		// Update the file		int perms = 0;		if (setuid == null)			perms |= (file.perms & 0x800);		else			perms |= (setuid.getState() ? 0x800 : 0);		perms |= (setgid.getState() ? 0x400 : 0);		perms |= user_p.getPerms();		perms |= group_p.getPerms();		perms |= other_p.getPerms();		if (sticky == null)			perms |= (file.perms & 01000);		else			perms |= (sticky.getState() ? 01000 : 0);		int rec = 0;		if (file.type == 0)			rec = rec_mode.getSelectedIndex();		String rv[] = filemgr.get_text(			"chmod.cgi?path="+filemgr.urlize(file.path)+			"&perms="+perms+"&user="+user.getText()+			"&group="+group.getText()+"&rec="+rec+			(linkto==null ? "" : "&linkto="+linkto.getText()));		if (rv[0].length() > 0) {			// Something went wrong			new ErrorWindow(filemgr.text("info_efailed",					file.path, rv[0]));			}		else {			// Update all changed file objects			if (linkto != null)				file.linkto = linkto.getText();			else if (rec == 0)				update_file(file, perms, false);			else if (rec == 1) {				// Update files in this directory				update_file(file, perms, false);				recurse_files(file, perms, false);				}			else if (rec == 2) {				// Update files and subdirs                                update_file(file, perms, false);				recurse_files(file, perms, true);				}			// Update directory list			int os = filemgr.files.selected();			filemgr.show_files(filemgr.showing_files);			filemgr.files.select(os);			dispose();			}		}	else {		// Just close		dispose();		}	}	void update_file(RemoteFile f, int perms, boolean perms_only)	{	f.user = user.getText();	f.group = group.getText();	if (perms_only)		f.perms = (perms & 0777) | (f.perms & 037777777000);	else		f.perms = perms;	}	void recurse_files(RemoteFile f, int perms, boolean do_subs)	{	if (f.list == null) return;	for(int i=0; i<f.list.length; i++) {		RemoteFile ff = f.list[i];		if (ff.type == 5) continue;		else if (ff.type == 0) {			if (do_subs) {				update_file(ff, perms, false);				recurse_files(ff, perms, true);				}			}		else update_file(ff, perms, true);		}	}	void setup_leftright(Panel m, Panel l, Panel r)	{	m.setLayout(new BorderLayout());	Panel p = new Panel();	p.setLayout(new BorderLayout());	p.add("West", l);	p.add("Center", r);	l.setLayout(new GridLayout(0, 1));	r.setLayout(new GridLayout(0, 1));	m.add("North", p);	}	void add_item(String t, Component c, Panel l, Panel r)	{	l.add(new Label(t));	Panel p = new Panel();	p.setLayout(new BorderLayout());	p.add("West", c);	r.add(p);	}}class PermissionsPanel extends Panel{	Checkbox read, write, exec;	int base;	PermissionsPanel(RemoteFile file, int base, FileManager filemgr)	{	int perms = file.perms;	this.base = base;	setLayout(new GridLayout(1, 3));	add(read = new Checkbox(filemgr.text("info_read")));	read.setState((perms&(base<<2)) != 0);	add(write = new Checkbox(filemgr.text("info_write")));	write.setState((perms&(base<<1)) != 0);	add(exec = new Checkbox(		filemgr.text(file.type==0 ? "info_list" : "info_exec")));	exec.setState((perms&base) != 0);	}	int getPerms()	{	int rv = 0;	rv |= (read.getState() ? (base<<2) : 0);	rv |= (write.getState() ? (base<<1) : 0);	rv |= (exec.getState() ? base : 0);	return rv;	}}class DeleteWindow extends FixedFrame implements CbButtonCallback{	CbButton delete_b, cancel_b;	FileManager filemgr;	RemoteFile file;	DeleteWindow(FileManager p, RemoteFile f)	{	filemgr = p;	file = f;	setTitle(filemgr.text(f.type == 0 ? "delete_dtitle" : "delete_ftitle"));	setLayout(new BorderLayout());	add("Center", new MultiLabel(filemgr.text(		f.type == 0 ? "delete_ddesc" : "delete_fdesc", f.path), 35));	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.CENTER));	bot.add(delete_b = new CbButton(filemgr.get_image("save.gif"),				        filemgr.text("delete"),					CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	pack();	show();	}	public void click(CbButton b)	{	if (b == delete_b) {		// Delete the file or directory		String rv[] = filemgr.get_text("delete.cgi?file="+					       filemgr.urlize(file.path));		if (rv[0].length() > 0)			new ErrorWindow(filemgr.text("delete_efailed",					file.path, rv[0]));		else {			// done the deed.. update data structures			RemoteFile pf = file.directory;			pf.delete(file);			if (filemgr.showing_files == pf) {				// Need to refresh the list as well..				filemgr.show_files(pf);				}			FileNode node = (FileNode)filemgr.nodemap.get(file);			FileNode pnode = (FileNode)filemgr.nodemap.get(pf);			if (node != null) {				// Take the directory out of the tree..				pnode.ch.removeElement(node);				filemgr.dirs.redraw();				}			}		dispose();		}	else if (b == cancel_b)		dispose();	}}class MkdirWindow extends FixedFrame implements CbButtonCallback{	FileManager filemgr;	TextField dir;	CbButton create_b, cancel_b;	MkdirWindow(String d, FileManager p)	{	filemgr = p;	setTitle(filemgr.text("mkdir_title"));	setLayout(new BorderLayout());	add("West", new Label(filemgr.text("mkdir_dir")));	add("Center", dir = new TextField(d.equals("/") ? "/" : d+"/", 40));	dir.select(dir.getText().length(), dir.getText().length());	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.CENTER));	bot.add(create_b = new CbButton(filemgr.get_image("save.gif"),				        filemgr.text("create"),					CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	pack();	show();	}	public void click(CbButton b)	{	if (b == create_b) {		// Find the filemgr directory		String path = dir.getText();		path = filemgr.trim_path(path);		int sl = path.lastIndexOf('/');		RemoteFile par = filemgr.find_directory(					path.substring(0, sl), false);		if (par.find(path.substring(sl+1)) != null) {			new ErrorWindow(filemgr.text("mkdir_eexists", path));			return;			}		String rv[] = filemgr.get_text("mkdir.cgi?dir="+					       filemgr.urlize(path));		if (rv[0].length() > 0) {			new ErrorWindow(filemgr.text("mkdir_efailed", rv[0]));			return;			}		RemoteFile file = new RemoteFile(filemgr, rv[1], par);		par.add(file);		FileNode parnode = (FileNode)filemgr.nodemap.get(par);		if (parnode != null) {			// Update the tree			parnode.add(new FileNode(file));			filemgr.dirs.redraw();			}		filemgr.show_files(filemgr.showing_files);		dispose();		}	else dispose();	}}class LinkWindow extends FixedFrame implements CbButtonCallback{	FileManager filemgr;	TextField from, to;	CbButton create_b, cancel_b;	LinkWindow(String d, FileManager p)	{	filemgr = p;	setLayout(new BorderLayout());	setTitle(filemgr.text("link_title"));	Panel l = new Panel(), r = new Panel();	l.setLayout(new GridLayout(0, 1));	l.add(new Label(filemgr.text("link_from")));	l.add(new Label(filemgr.text("link_to")));	r.setLayout(new GridLayout(0, 1));	r.add(from = new TextField(d.equals("/") ? "/" : d+"/", 40));	from.select(from.getText().length(), from.getText().length());	r.add(to = new TextField());	add("West", l); add("Center", r);	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.CENTER));	bot.add(create_b = new CbButton(filemgr.get_image("save.gif"),				        filemgr.text("create"),					CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	pack();	show();	}	public void click(CbButton b)	{	if (b == create_b) {		// Check inputs		String from_str = from.getText().trim();		int sl = from_str.lastIndexOf('/');		String par_str = from_str.substring(0, sl),		       file_str = from_str.substring(sl+1);		RemoteFile par = filemgr.find_directory(par_str, false);		if (par == null) return;		if (par.find(file_str) != null) {			new ErrorWindow(filemgr.text("link_eexists", from_str));			return;			}		// Create the actual link		String rv[] = filemgr.get_text("makelink.cgi?from="+					       filemgr.urlize(from_str)+"&to="+					       filemgr.urlize(to.getText()));		if (rv[0].length() > 0) {			new ErrorWindow(filemgr.text("link_efailed", rv[0]));			return;			}		RemoteFile file = new RemoteFile(filemgr, rv[1], par);		par.add(file);		filemgr.show_files(filemgr.showing_files);		dispose();		}	else if (b == cancel_b)		dispose();	}}class RenameWindow extends FixedFrame implements CbButtonCallback{	FileManager filemgr;	RemoteFile file;	TextField oldname, newname;	CbButton rename_b, cancel_b;	RenameWindow(FileManager p, RemoteFile f)	{	filemgr = p; file = f;	setLayout(new BorderLayout());	setTitle(filemgr.text("rename_title", file.path));	Panel l = new Panel(), r = new Panel();	l.setLayout(new GridLayout(0, 1));	l.add(new Label(filemgr.text("rename_old")));	l.add(new Label(filemgr.text("rename_new")));	r.setLayout(new GridLayout(0, 1));	r.add(oldname = new TextField(file.name, 20));	oldname.setEditable(false);	r.add(newname = new TextField(file.name, 20));	newname.select(file.name.length(), file.name.length());	add("West", l); add("Center", r);	Panel bot = new Panel();	bot.setLayout(new FlowLayout(FlowLayout.CENTER));	bot.add(rename_b = new CbButton(filemgr.get_image("save.gif"),				        filemgr.text("rename_ok"),					CbButton.LEFT, this));	bot.add(cancel_b = new CbButton(filemgr.get_image("cancel.gif"),					filemgr.text("cancel"),					CbButton.LEFT, this));	add("South", bot);	pack();	show();	}	public void click(CbButton b)	{	if (b == rename_b) {		// Check for an existing file		String newstr = newname.getText().trim();		if (newstr.length() == 0) return;		RemoteFile already = file.directory.find(newstr);		if (already != null) {			new ErrorWindow(filemgr.text("rename_eexists", newstr));			return;			}		// Rename the real file		int sl = file.path.lastIndexOf('/');		String newpath = file.path.substring(0, sl)+"/"+newstr;		String rv[] = filemgr.get_text(				"rename.cgi?old="+filemgr.urlize(file.path)+				"&new="+filemgr.urlize(newpath));		if (rv[0].length() > 0) {			new ErrorWindow(filemgr.text("rename_efailed", rv[0]));			return;			}		// Update data structures		file.name = newstr;		file.path = newpath;		file.directory.delete(file);		file.directory.add(file);		FileNode parnode = (FileNode)filemgr.nodemap.get(file.directory);		FileNode filenode = (FileNode)filemgr.nodemap.get(file);		if (parnode != null && filenode != null) {			filenode.text = file.name;			parnode.ch.removeElement(filenode);			parnode.add(filenode);			dispose();			filemgr.dirs.redraw();			}		filemgr.show_files(filemgr.showing_files);		dispose();		}	else if (b == cancel_b)		dispose();	}}class MultiLabel extends BorderPanel{	public MultiLabel(String s, int max)	{	super(1);	Vector v = new Vector();	StringTokenizer tok = new StringTokenizer(s.trim(), " \t");	String line = null;	while(tok.hasMoreTokens()) {		String w = tok.nextToken();		line = (line == null ? w : line+" "+w);		if (line.length() > max || !tok.hasMoreTokens()) {			v.addElement(line);			line = null;			}		}	setLayout(new GridLayout(v.size(), 0, 0, 0));	for(int i=0; i<v.size(); i++)		add(new Label((String)v.elementAt(i), Label.CENTER));	}}

⌨️ 快捷键说明

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