From: <vo...@us...> - 2008-02-21 15:08:06
|
Revision: 11833 http://jedit.svn.sourceforge.net/jedit/?rev=11833&view=rev Author: voituk Date: 2008-02-21 07:08:04 -0800 (Thu, 21 Feb 2008) Log Message: ----------- First little step to fix bug#1833623 Modified Paths: -------------- plugins/FTP/trunk/FTP.props plugins/FTP/trunk/ftp/FtpConnection.java plugins/FTP/trunk/ftp/FtpVFS.java plugins/FTP/trunk/ftp/SFtpConnection.java Modified: plugins/FTP/trunk/FTP.props =================================================================== --- plugins/FTP/trunk/FTP.props 2008-02-21 14:33:39 UTC (rev 11832) +++ plugins/FTP/trunk/FTP.props 2008-02-21 15:08:04 UTC (rev 11833) @@ -75,13 +75,16 @@ #vfs.ftp.list.0=[ld-](.{9})\\s+\\d+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* # drwx------ 11 slava slava 1024 Sep 12 15:36 plugins -vfs.ftp.list.0=[ld-](.{9})\\+?\\s+\\d+\\s+\\S+\\s+\\S+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* +##vfs.ftp.list.0=[ld-](.{9})\\+?\\s+\\d+\\s+\\S+\\s+\\S+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* +vfs.ftp.list.0=[ld-](.{9})\\+?\\s+\\d+\\s+(\\S+)\\s+(\\S+)\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* # -rw-rw-r-- 1 apache 226 Oct 14 2002 chars.cfm -vfs.ftp.list.1=[ld-](.{9})\\+?\\s+\\d+\\s+\\S+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* +##vfs.ftp.list.1=[ld-](.{9})\\+?\\s+\\d+\\s+\\S+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* +vfs.ftp.list.1=[ld-](.{9})\\+?\\s+\\d+\\s+(\\S+)()\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)\\s* # drwx------ 11 plugins -vfs.ftp.list.2=[ld-](.{9}).*\\s+(\\d+)\\s+(.+)\\s* +##vfs.ftp.list.2=[ld-](.{9}).*\\s+(\\d+)\\s+(.+)\\s* +vfs.ftp.list.2=[ld-](.{9}).*\\s+()()(\\d+)\\s+(.+)\\s* vfs.ftp.list.dos=\\S+\\s+\\S+\\s+(<DIR>|\\d+)\\s+(.+)\\s* vfs.ftp.list.vms=(.+?);\\d+\\s+(\\d+)(?:|/\\d+)\\s+.+\\s+\\((.+)\\) Modified: plugins/FTP/trunk/ftp/FtpConnection.java =================================================================== --- plugins/FTP/trunk/ftp/FtpConnection.java 2008-02-21 14:33:39 UTC (rev 11832) +++ plugins/FTP/trunk/ftp/FtpConnection.java 2008-02-21 15:08:04 UTC (rev 11833) @@ -58,10 +58,7 @@ client.connect(info.host,info.port); if(!client.getResponse().isPositiveCompletion()) - { - throw new FtpException( - client.getResponse()); - } + throw new FtpException(client.getResponse()); client.userName(info.user); @@ -126,7 +123,7 @@ // some servers might not support -a, so if we get an error // try without -a - ArrayList directoryVector = _listDirectory(true); + ArrayList<FtpVFS.FtpDirectoryEntry> directoryVector = _listDirectory(true); if(directoryVector == null || directoryVector.size() == 0) directoryVector = _listDirectory(false); @@ -185,7 +182,7 @@ // to determine if this is a file or a directory, we list it. // if the list contains 1 entry, guess that this is a file - LinkedList listing = new LinkedList(); + LinkedList<FtpDirectoryEntry> listing = new LinkedList<FtpDirectoryEntry>(); try { @@ -193,12 +190,10 @@ while((line = reader.readLine()) != null) { FtpVFS.FtpDirectoryEntry dirEntry = lineToDirectoryEntry(line); - if(dirEntry != null) + if(dirEntry != null) { listing.add(dirEntry); - else - { - Log.log(Log.DEBUG,this,"Discarding " - + line); + } else { + Log.log(Log.DEBUG,this,"Discarding " + line); } } } @@ -302,8 +297,7 @@ void chmod(String path, int permissions) throws IOException { - String cmd = "CHMOD " + Integer.toString(permissions,8) - + " " + path; + String cmd = "CHMOD " + Integer.toString(permissions,8) + " " + path; client.siteParameters(cmd); } @@ -366,47 +360,30 @@ static { - unixRegexps = new Pattern[jEdit.getIntegerProperty( - "vfs.ftp.list.count",-1)]; - for(int i = 0; i < unixRegexps.length; i++) - { - unixRegexps[i] = Pattern.compile(jEdit.getProperty( - "vfs.ftp.list." + i), - Pattern.UNIX_LINES); + unixRegexps = new Pattern[jEdit.getIntegerProperty("vfs.ftp.list.count",-1)]; + for(int i = 0; i < unixRegexps.length; i++) { + unixRegexps[i] = Pattern.compile(jEdit.getProperty("vfs.ftp.list." + i), Pattern.UNIX_LINES); } - dosRegexp.compile(jEdit.getProperty( - "vfs.ftp.list.dos"), - Pattern.UNIX_LINES); + dosRegexp = Pattern.compile(jEdit.getProperty("vfs.ftp.list.dos"), Pattern.UNIX_LINES); - vmsRegexp = Pattern.compile(jEdit.getProperty( - "vfs.ftp.list.vms"), - Pattern.UNIX_LINES); + vmsRegexp = Pattern.compile(jEdit.getProperty("vfs.ftp.list.vms"), Pattern.UNIX_LINES); - vmsPartialRegexp = Pattern.compile(jEdit.getProperty( - "vfs.ftp.list.vms.partial"), - Pattern.UNIX_LINES); + vmsPartialRegexp = Pattern.compile(jEdit.getProperty("vfs.ftp.list.vms.partial"), Pattern.UNIX_LINES); - vmsRejectedRegexp = Pattern.compile(jEdit.getProperty( - "vfs.ftp.list.vms.rejected"), - Pattern.UNIX_LINES); + vmsRejectedRegexp = Pattern.compile(jEdit.getProperty("vfs.ftp.list.vms.rejected"), Pattern.UNIX_LINES); - as400Regexp = Pattern.compile(jEdit.getProperty( - "vfs.ftp.list.as400"), - Pattern.UNIX_LINES); + as400Regexp = Pattern.compile(jEdit.getProperty("vfs.ftp.list.as400"), Pattern.UNIX_LINES); } private void setupSocket() throws IOException { // See if we should use Binary mode to transfer files. - if (jEdit.getBooleanProperty("vfs.ftp.binary")) - { + if (jEdit.getBooleanProperty("vfs.ftp.binary")) { //Go with Binary client.representationType(FtpClient.IMAGE_TYPE); - } - else - { + } else { //Stick to ASCII - let the line endings get converted client.representationType(FtpClient.ASCII_TYPE); } @@ -487,52 +464,53 @@ long length = 0L; int permissions = 0; String permissionString = null; + String ownerName = null; + String ownerGroup = null; boolean ok = false; - if(prevLine != null) - { + if(prevLine != null) { // handle VMS listings split over several lines line = prevLine + line; prevLine = null; } - for(int i = 0; i < unixRegexps.length; i++) - { + for(int i = 0; i < unixRegexps.length; i++) { Pattern regexp = unixRegexps[i]; Matcher match; - if((match = regexp.matcher(line)) != null && match.matches()) - { - switch(line.charAt(0)) - { - case 'd': - type = FtpVFS.FtpDirectoryEntry.DIRECTORY; - break; - case 'l': - type = FtpVFS.FtpDirectoryEntry.LINK; - break; - case '-': - type = FtpVFS.FtpDirectoryEntry.FILE; - break; - } + if((match = regexp.matcher(line)) == null || !match.matches()) continue; + + switch(line.charAt(0)) { + case 'd': + type = FtpVFS.FtpDirectoryEntry.DIRECTORY; + break; + case 'l': + type = FtpVFS.FtpDirectoryEntry.LINK; + break; + case '-': + type = FtpVFS.FtpDirectoryEntry.FILE; + break; + } - permissionString = match.group(1); - permissions = MiscUtilities.parsePermissions( - permissionString); + permissionString = match.group(1); + permissions = MiscUtilities.parsePermissions(permissionString); - try - { - length = Long.parseLong(match.group(2)); - } - catch(NumberFormatException nf) - { - length = 0L; - } - - name = match.group(3); - ok = true; - break; + ownerName = match.group(2); + ownerGroup = match.group(3); + + try { + length = Long.parseLong(match.group(4)); + } catch(NumberFormatException nf) { + length = 0L; } + + name = match.group(5); + ok = true; + /*Log.log(Log.DEBUG, FtpConnection.class, "Line: " + line); + Log.log(Log.DEBUG, FtpConnection.class, "Matches regexp#"+i+": " + regexp); + for (int j=1; j<=match.groupCount(); j++) + Log.log(Log.DEBUG, FtpConnection.class, j+"=>"+match.group(j));*/ + break; } if(!ok) @@ -553,10 +531,8 @@ match.group(2)) * 512; if(name.endsWith(".DIR")) { - name = name.substring(0, - name.length() - 4); - type = FtpVFS.FtpDirectoryEntry - .DIRECTORY; + name = name.substring(0,name.length() - 4); + type = FtpVFS.FtpDirectoryEntry.DIRECTORY; } permissionString = match.group(3); ok = true; @@ -617,14 +593,15 @@ return null; // path is null; it will be created later, by listDirectory() - return new FtpVFS.FtpDirectoryEntry(name,null,null,type, + FtpVFS.FtpDirectoryEntry result = new FtpVFS.FtpDirectoryEntry(name,null,null,type, length,name.charAt(0) == '.' /* isHidden */, permissions,permissionString); + result.setOwner(ownerName, ownerGroup); + return result; } catch(Exception e) { - Log.log(Log.NOTICE,this,"lineToDirectoryEntry(" - + line + ") failed:"); + Log.log(Log.NOTICE,this,"lineToDirectoryEntry(" + line + ") failed:"); Log.log(Log.NOTICE,this,e); return null; } Modified: plugins/FTP/trunk/ftp/FtpVFS.java =================================================================== --- plugins/FTP/trunk/ftp/FtpVFS.java 2008-02-21 14:33:39 UTC (rev 11832) +++ plugins/FTP/trunk/ftp/FtpVFS.java 2008-02-21 15:08:04 UTC (rev 11833) @@ -47,6 +47,9 @@ public static final String FTP_PROTOCOL = "ftp"; public static final String SFTP_PROTOCOL = "sftp"; + public static final String EA_OWNER_USER = "user"; + public static final String EA_OWNER_GROUP = "group"; + // same as File VFS permissions key! public static final String PERMISSIONS_PROPERTY = "FileVFS__perms"; @@ -245,12 +248,16 @@ } //}}} //{{{ FtpDirectoryEntry class + @SuppressWarnings("serial") static class FtpDirectoryEntry extends VFSFile { public static final int LINK = 10; int permissions; String permissionString; + private String ownerUser; + private String ownerGroup; + public FtpDirectoryEntry(String name, String path, String deletePath, int type, long length, boolean hidden, int permissions, @@ -263,21 +270,28 @@ public String getExtendedAttribute(String name) { + if (name.equals(FtpVFS.EA_OWNER_USER)) + return ownerUser; + if (name.equals(FtpVFS.EA_OWNER_GROUP)) + return ownerGroup; if(name.equals(EA_TYPE) || name.equals(EA_SIZE)) return super.getExtendedAttribute(name); - else if(name.equals(EA_STATUS)) + if(name.equals(EA_STATUS)) return permissionString; - else - return null; + return null; } + + public void setOwner(String name, String group) { + this.ownerUser = name==null || name.equals("") ? null : name; + this.ownerGroup = group==null || group.equals("") ? null : group; + } + } //}}} //{{{ _getFile() method // this method is severely broken, and in many cases, most fields // of the returned directory entry will not be filled in. - public VFSFile _getFile(Object _session, String path, - Component comp) - throws IOException + public VFSFile _getFile(Object _session, String path, Component comp) throws IOException { Connection session = getConnection(_session); @@ -286,8 +300,7 @@ FtpDirectoryEntry dirEntry = session.getDirectoryEntry(address.path); if(dirEntry != null) { - if(dirEntry.getType() == FtpDirectoryEntry.LINK) - { + if(dirEntry.getType() == FtpDirectoryEntry.LINK) { String parentPath = MiscUtilities.getParentOfPath(path); resolveSymlink(_session,parentPath,dirEntry); } @@ -304,19 +317,11 @@ if(buffer != null) { Log.log(Log.DEBUG,this, - path - + " has permissions 0" - + Integer.toString( - dirEntry.permissions,8)); - - buffer.setIntegerProperty(PERMISSIONS_PROPERTY, - dirEntry.permissions); + path + " has permissions 0" + Integer.toString(dirEntry.permissions,8)); + buffer.setIntegerProperty(PERMISSIONS_PROPERTY, dirEntry.permissions); + } else { + //Log.log(Log.ERROR,this, path + " not open?"); } - else - { - //Log.log(Log.ERROR,this, - // path + " not open?"); - } } } @@ -492,8 +497,7 @@ entry.setType(FtpDirectoryEntry.FILE); else if(linkDirEntry.getType() == FtpDirectoryEntry.LINK) { - Log.log(Log.WARNING,this,entry.getName() - + ": Not following more than one symbolic link"); + Log.log(Log.WARNING,this,entry.getName() + ": Not following more than one symbolic link"); entry.setType(FtpDirectoryEntry.FILE); entry.permissions = 600; } Modified: plugins/FTP/trunk/ftp/SFtpConnection.java =================================================================== --- plugins/FTP/trunk/ftp/SFtpConnection.java 2008-02-21 14:33:39 UTC (rev 11832) +++ plugins/FTP/trunk/ftp/SFtpConnection.java 2008-02-21 15:08:04 UTC (rev 11833) @@ -24,6 +24,8 @@ import com.jcraft.jsch.*; +import ftp.FtpVFS.FtpDirectoryEntry; + import java.io.*; import java.util.*; import javax.swing.JOptionPane; @@ -101,12 +103,12 @@ FtpVFS.FtpDirectoryEntry[] listDirectory(String path) throws IOException { - ArrayList listing = new ArrayList(); + ArrayList<FtpDirectoryEntry> listing = new ArrayList<FtpDirectoryEntry>(); int count=0; try { - java.util.Vector vv=sftp.ls(path); + Vector vv = sftp.ls(path); if(vv!=null) { for(int ii=0; ii<vv.size(); ii++){ Object obj=vv.elementAt(ii); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |