All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.globus.ftp.FeatureList Maven / Gradle / Ivy

Go to download

GridFTP is a high-performance, secure, reliable data transfer protocol optimized for high-bandwidth wide-area networks. The GridFTP protocol is based on FTP, the highly-popular Internet file transfer protocol. We have selected a set of protocol features and extensions defined already in IETF RFCs and added a few additional features to meet requirements from current data grid projects. This GRIDFTP libary and client is based on JAVA.

The newest version!
/*
 * Copyright 1999-2006 University of Chicago
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.globus.ftp;

import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
   Represents features supported by server (as returned by FEAT command).
   Use the static members of this class to refer to well known feature names.
   Example: check if the server supports PARALLEL feature:
   
   FeatureList fl = new FeatureList(client.getFeatureList());
   if (fl.contains(FeatureList.PARALLEL)) {
       ...
   }
   
**/ public class FeatureList { /** * RFC 2389 specified the following syntax for FEAT responce *
     * feat-response   = error-response / no-features / feature-listing
     *  no-features     = "211" SP *TCHAR CRLF
     *  feature-listing = "211-" *TCHAR CRLF
     *                    1*( SP feature CRLF )
     *                    "211 End" CRLF
     *  feature         = feature-label [ SP feature-parms ]
     *  feature-label   = 1*VCHAR
     *  feature-parms   = 1*TCHAR
     * 
* Feature class represence each individual feature and contain two fields * required label and optional parms * */ public static final class Feature { private final String label; private final String parms; private Feature (String label) { if(label == null ) { throw new NullPointerException("label is null"); } this.label = label; this.parms = null; } private Feature (String label, String parms) { if(label == null ) { throw new NullPointerException("label is null"); } this.label = label; this.parms = parms; } /** * @return the name */ public String getLabel() { return label; } /** * @return the qualifiers, null if no qualifiers */ public String getParms() { return parms; } @Override public boolean equals(Object obj) { if( !(obj instanceof Feature)) { return false; } Feature aFeature = (Feature) obj; if( !label.equals(aFeature.label) ) { return false; } if( parms == null ) { return aFeature.parms == null; } return parms.equals( aFeature.parms); } } // well known labels public static final String SIZE = "SIZE"; public static final String MDTM = "MDTM"; public static final String PARALLEL = "PARALLEL"; public static final String ESTO = "ESTO"; public static final String ERET = "ERET"; public static final String SBUF = "SBUF"; public static final String ABUF = "ABUF"; public static final String DCAU = "DCAU"; public static final String PIPE = "PIPE"; public static final String MODEX = "MODEX"; public static final String GETPUT = "GETPUT"; public static final String CKSUM = "CKSUM"; protected final List features = new ArrayList(); public FeatureList(String featReplyMsg) { StringTokenizer responseTokenizer = new StringTokenizer(featReplyMsg, System.getProperty("line.separator")); // ignore the first part of the message if (responseTokenizer.hasMoreElements()) { responseTokenizer.nextToken(); } while ( responseTokenizer.hasMoreElements() ) { String line = (String) responseTokenizer.nextElement(); line = line.trim().toUpperCase(); if ( line.startsWith( "211 END" ) ) { break; } String[] splitFeature = line.split(" "); if( splitFeature.length ==2) { features.add(new Feature(splitFeature[0], splitFeature[1])); } else { features.add(new Feature(line)); } } } public boolean contains(String label) { if (label == null) { throw new IllegalArgumentException("label is null"); } //split argument using white space. String[] tokens = label.split(" ",2); if(tokens.length <1) { throw new IllegalArgumentException("label is empty"); } label = tokens[0].toUpperCase(); String parms = null; if(tokens.length >1) { parms = tokens[1]; } for( Feature feature:features ) { if(feature.getLabel().equals(label)) { if (parms == null) { //if parms are not specified as a part of the argument // string, we compare labels only return true; } else { //if parms are specified, we compare them as well Feature argFeature = new Feature(label, parms); if(argFeature.equals(feature)) { return true; } } } } return false; } /** * Get all features that have label equal to the argument * Note that RFC 2389 does not require a feature with a * given label to appear only once * @param label * @return List of found features with given label in the same order * as they were given to us by the server */ public List getFeature(String label) { if (label == null) { throw new IllegalArgumentException("feature label is null"); } label = label.toUpperCase(); List foundFeatures = new ArrayList(); for( Feature feature:features ) { if(feature.getLabel().equals(label)) { foundFeatures.add(feature); } } return foundFeatures; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy