git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1674 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			219 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
/*
 | 
						|
 *
 | 
						|
 * Copyright 2004 The Ant-Contrib project
 | 
						|
 *
 | 
						|
 *  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 net.sf.antcontrib.cpptasks;
 | 
						|
 | 
						|
import java.io.File;
 | 
						|
import java.io.IOException;
 | 
						|
 | 
						|
import org.apache.tools.ant.BuildException;
 | 
						|
import org.apache.tools.ant.types.DataType;
 | 
						|
 | 
						|
/**
 | 
						|
 * Local to remote filename mapping (Experimental).
 | 
						|
 *
 | 
						|
 */
 | 
						|
public final class DistributerMap
 | 
						|
    extends DataType {
 | 
						|
  /**
 | 
						|
   * if property.
 | 
						|
   */
 | 
						|
  private String ifCond;
 | 
						|
 | 
						|
  /**
 | 
						|
   * unless property.
 | 
						|
   */
 | 
						|
  private String unlessCond;
 | 
						|
 | 
						|
  /**
 | 
						|
   * local directory name.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  private File localName;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Canonical local file name.
 | 
						|
   */
 | 
						|
  private String canonicalPath;
 | 
						|
 | 
						|
  /**
 | 
						|
   * remote name.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  private String remoteName;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Separator (/ or \) character on remote system.
 | 
						|
   */
 | 
						|
  private char remoteSeparator = File.separatorChar;
 | 
						|
 | 
						|
  /**
 | 
						|
   * hosts that for which this map is valid.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  private String hosts;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructor.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public DistributerMap() {
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Required by documentation generator.
 | 
						|
   */
 | 
						|
  public void execute()  {
 | 
						|
    throw new org.apache.tools.ant.BuildException(
 | 
						|
        "Not an actual task, but looks like one for documentation purposes");
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns true if the if and unless conditions (if any) are
 | 
						|
   * satisfied.
 | 
						|
   *
 | 
						|
   * @return true if this object is active.
 | 
						|
   */
 | 
						|
  public boolean isActive()  {
 | 
						|
    return CUtil.isActive(getProject(), ifCond, unlessCond);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the property name for the 'if' condition.
 | 
						|
   *
 | 
						|
   * This object will be ignored unless the property is defined.
 | 
						|
   *
 | 
						|
   * The value of the property is insignificant, but values that would imply
 | 
						|
   * misinterpretation ("false", "no") will throw an exception when
 | 
						|
   * evaluated.
 | 
						|
   *
 | 
						|
   * @param propName
 | 
						|
   *            property name
 | 
						|
   */
 | 
						|
  public void setIf(final String propName) {
 | 
						|
    ifCond = propName;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the property name for the 'unless' condition.
 | 
						|
   *
 | 
						|
   * If named property is set, the define will be ignored.
 | 
						|
   *
 | 
						|
   * The value of the property is insignificant, but values that would imply
 | 
						|
   * misinterpretation ("false", "no") of the behavior will throw an
 | 
						|
   * exception when evaluated.
 | 
						|
   *
 | 
						|
   * @param propName
 | 
						|
   *            name of property
 | 
						|
   */
 | 
						|
  public void setUnless(final String propName) {
 | 
						|
    unlessCond = propName;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Gets local directory.
 | 
						|
   * @return local directory, may be null.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public File getLocal() {
 | 
						|
    return localName;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Gets remote name for directory.
 | 
						|
   * @return remote name, may be null.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public String getRemote() {
 | 
						|
    return remoteName;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Converts the local file name to the remote name for the same file.
 | 
						|
   *
 | 
						|
   * @param host host
 | 
						|
   * @param localFile local file
 | 
						|
   * @return remote name for local file, null if unknown.
 | 
						|
   */
 | 
						|
  public String toRemote(final String host, final File localFile) {
 | 
						|
    if (remoteName != null
 | 
						|
        && (hosts == null || hosts.indexOf(host) >= 0)) {
 | 
						|
      try {
 | 
						|
        String canonical = localFile.getCanonicalPath();
 | 
						|
        if (canonical.startsWith(canonicalPath)) {
 | 
						|
          if (isActive()) {
 | 
						|
            return remoteName
 | 
						|
                + canonical.substring(canonicalPath.length()).replace(File.
 | 
						|
                separatorChar, remoteSeparator);
 | 
						|
          }
 | 
						|
        }
 | 
						|
      } catch (IOException ex) {
 | 
						|
        return null;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets local directory for base of mapping.
 | 
						|
   *
 | 
						|
   * @param value value
 | 
						|
   */
 | 
						|
  public void setLocal(final File value)  {
 | 
						|
    if (value == null) {
 | 
						|
      throw new NullPointerException("value");
 | 
						|
    }
 | 
						|
    if (value.exists() && !value.isDirectory()) {
 | 
						|
      throw new BuildException("local should be a directory");
 | 
						|
    }
 | 
						|
    localName = value;
 | 
						|
    try {
 | 
						|
      canonicalPath = localName.getCanonicalPath();
 | 
						|
    } catch (IOException ex) {
 | 
						|
      throw new BuildException(ex);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets remote name for directory.
 | 
						|
   * @param value remote name for directory
 | 
						|
   */
 | 
						|
  public void setRemote(final String value) {
 | 
						|
    remoteName = value;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the separator character (/ or \) for the remote system.
 | 
						|
   * @param value separator character
 | 
						|
   */
 | 
						|
  public void setRemoteSeparator(final String value)  {
 | 
						|
    if (value != null && value.length() != 1) {
 | 
						|
      throw new BuildException("remote separator must be a single character");
 | 
						|
    }
 | 
						|
    remoteSeparator = value.charAt(0);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets hosts for which this mapping is valid.
 | 
						|
   *
 | 
						|
   * @param value hosts
 | 
						|
   */
 | 
						|
  public void setHosts(final String value) {
 | 
						|
    hosts = value;
 | 
						|
  }
 | 
						|
 | 
						|
}
 |