📄 filemanager.java
字号:
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 + -