/** * Copyright 2007-2008 University Of Southern California * * 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 edu.isi.pegasus.planner.classes; import edu.isi.pegasus.common.util.Escape; import java.util.ArrayList; import java.util.List; /** * This Class hold informations about profiles associated with a tc.</p> * * @author Gaurang Mehta gmehta@isi.edu * @author Karan Vahi vahi@isi.edu * * @version $Revision$ */ public class Profile extends Data { /** * A private static handle to the escape class. */ private static Escape mEscape = new Escape(); public static final String CONDOR = "condor"; public static final String GLOBUS = "globus"; public static final String VDS = "pegasus"; public static final String DAGMAN = "dagman"; public static final String HINTS = "hints"; public static final String ENV = "env"; public static final String STAT = "stat"; public static final String METADATA = "metadata"; public static final String SELECTOR = "selector"; private String mNamespace; private String mKey ; private String mValue; /** * Returns the unknown namespace message. * * @param namespace the namespace. * @return the message */ public static final String unknownNamespaceMessage( String namespace ){ StringBuffer sb = new StringBuffer(); sb.append( "Unknown namespace type " ).append( namespace ). append( " . Valid types are " ).append( validTypesToString() ); return sb.toString(); } /** * Returns a boolean indicating whether the namespace is valid or not. * * @param namespace the namespace * * @return true if valid namespace */ public static boolean namespaceValid( String namespace ){ boolean valid = false; //sanity checks if( namespace == null || namespace.length() < 2){ return valid; } return ( namespace.equalsIgnoreCase( CONDOR ) || namespace.equalsIgnoreCase( GLOBUS ) || namespace.equalsIgnoreCase( VDS ) || namespace.equalsIgnoreCase( DAGMAN ) || namespace.equalsIgnoreCase( HINTS ) || namespace.equalsIgnoreCase( ENV ) || namespace.equalsIgnoreCase( SELECTOR ) || namespace.equalsIgnoreCase( METADATA ) || namespace.equalsIgnoreCase( STAT ) ) ; } /** * Returns a comma separated string containing the valid namespace types. * * @return comma separated list. */ public static String validTypesToString( ){ StringBuffer sb = new StringBuffer(); sb.append( CONDOR ).append( ',' ).append( GLOBUS ).append( ',' ). append( VDS ).append( ',' ).append( DAGMAN ).append( ',' ). append( HINTS ).append( ',' ).append( ENV ). append( ',' ).append( METADATA ); return sb.toString(); } /** * * C'tpr for the class; * @throws java.lang.Exception */ public Profile() { mNamespace = null; mKey = null; mValue = null; } /** * This constructor allows to set the namespace , key and value of the PoolProfile. * * @param namespace Takes a String as the namespace. Has to be one of the predefined types. * @param key Takes a String as the key. * @param value The value for the key as String * @throws Exception */ public Profile( String namespace, String key, String value ) { if ( namespaceValid( namespace ) ){ mNamespace = namespace; mKey = key ; mValue = value ; } else { throw new RuntimeException( unknownNamespaceMessage( namespace ) ); } } /** * This method allows to set the namespace , key and value of the Profile. * * @param namespace Takes a String as the namespace. Has to be one of the predefined types. * @param key Takes a String as the key. * @param value The value for the key as String * * @throws Exception */ public void setProfile( String namespace, String key, String value ) { if ( namespaceValid( namespace ) ){ mNamespace = new String( namespace ); mKey = new String( key ); mValue = new String( value ); } else { throw new RuntimeException( unknownNamespaceMessage( namespace ) ); } } /** * Returns the Profile (namespace, value and key); * @return ArrayList */ public List getProfile() { ArrayList m_profile = new ArrayList( 3 ); m_profile.add( mNamespace ); m_profile.add( mKey ); m_profile.add( mValue ); return m_profile; } /** * Sets the NameSpace of the Profile * * @param namespace the namespace * * @exception in case of invalid namespace */ public void setProfileNamespace( String namespace ) { if( namespaceValid( namespace ) ){ mNamespace = namespace; return; } else { throw new RuntimeException( unknownNamespaceMessage( namespace ) ); } } /** * Returns the NameSpace of the Profile * @return String */ public String getProfileNamespace() { return mNamespace; } /** * Sets the profile key * * @param key the profile key */ public void setProfileKey( String key ) { mKey = key; } /** * Returns the Key of the Profile * @return String */ public String getProfileKey() { return mKey; } /** * Sets the profile value * * @param value the profile value */ public void setProfileValue( String value ) { mValue = value; } /** * Returns the Value for the profile * @return String */ public String getProfileValue() { return mValue; } /** * Returns the textual description of the contents of <code>Profile</code> * object in the multiline format. * * @return the textual description in multiline format. */ public String toMultiLine() { return this.toString(); } /** * This method returns a string of the contents of this object. * The values are always escaped. * * @return String * @see org.griphyn.common.util.Escape */ public String toString() { String output = "profile " + mNamespace + " \"" + mKey + "\" \"" + mEscape.escape(mValue) + "\""; // System.out.println(output); return output; } /** * This method returns an xml of the contents of this object. * @return String. */ public String toXML() { String output = "<profile namespace=\"" + mNamespace + "\" key=\"" + mKey + "\" >" + mValue + "</profile>"; // System.out.println(output); return output; } /** * Matches two Profile objects * * @return true if the pfn and all the attributes match, false otherwise. */ @Override public boolean equals(Object obj) { // null check if (obj == null) { return false; } // see if type of objects match if (!(obj instanceof Profile)) { return false; } Profile p = (Profile) obj; boolean result = ( this.mNamespace == null && p.mNamespace == null) || (this.mNamespace != null && p.mNamespace != null && mNamespace.equals(p.mNamespace) ); if( result ){ //check for key result = ( this.mKey == null && p.mKey == null) || (this.mKey != null && p.mKey != null && mKey.equals(p.mKey) ); } if( result ){ //check for value result = ( this.mValue == null && p.mValue == null) || (this.mValue != null && p.mValue != null && mValue.equals(p.mValue) ); } return result; } /** * Returns a copy of the object. * * @return copy of the object. */ public Object clone() { Profile newprofile=null; try { newprofile = new Profile( mNamespace, mKey, mValue ); } catch ( Exception e ) { } return newprofile; } }