| package jpos.config; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // This software is provided "AS IS". The JavaPOS working group (including |
| // each of the Corporate members, contributors and individuals) MAKES NO |
| // REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, |
| // EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED |
| // WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| // NON-INFRINGEMENT. The JavaPOS working group shall not be liable for |
| // any damages suffered as a result of using, modifying or distributing this |
| // software or its derivatives. Permission to use, copy, modify, and distribute |
| // the software and its documentation for any purpose is hereby granted. |
| // |
| // The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which |
| // is an OSS Apache-like license. The complete license is located at: |
| // http://oss.software.ibm.com/developerworks/opensource/license-cpl.html |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| import java.io.Serializable; |
| |
| import java.util.Enumeration; |
| import java.util.Iterator; |
| |
| /** |
| * Defines the minimal set of methods for a JposEntry object |
| * It allows the entries to contain properties <key, value> pairs |
| * The key being a String and the value any serializable Java objects |
| * NOTE: JposEntry implementation can be easily implemented using a |
| * java.util.Hashtable |
| * @since 0.1 (Philly 99 meeting) |
| * @author E. Michael Maximilien (maxim@us.ibm.com) |
| */ |
| public interface JposEntry extends Serializable, Comparable |
| { |
| /** |
| * @return count of number of properties |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public int getPropertyCount(); |
| |
| /** |
| * @return an enumerator for the properties names |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public Enumeration getPropertyNames(); |
| |
| /** |
| * @return true if there is a property by the name specified |
| * @since 0.1 (Philly 99 meeting) |
| * @param propName the property name String |
| */ |
| public boolean hasPropertyWithName( String propName ); |
| |
| /** |
| * @return true if there is a property by the value specified |
| * <p><b>NOTE: Object.equals method will be used to compare</b></p> |
| * @param propValue the property's value Object |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public boolean hasPropertyWithValue( Object propValue ); |
| |
| /** |
| * @return the property's value Object |
| * @param propName the property's name String |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public Object getPropertyValue( String propName ); |
| |
| /** |
| * @return the property's type |
| * @param propName the property's name String |
| * @since 2.0.0 |
| */ |
| public Class getPropertyType( String propName ); |
| |
| /** |
| * Modifies the property value of the property passed |
| * @return the oldPropValue or null if this property does not exist |
| * @param propName the property name |
| * @param propValue the new property value |
| * @since 1.3 (Tokyo 2001 meeting) |
| * @throws java.lang.IllegalArgumentException if the propName or propValue is null |
| */ |
| public Object modifyPropertyValue( String propName, Object propValue ) throws IllegalArgumentException; |
| |
| /** |
| * Adds a property to the JposEntry object. |
| * NOTE: any property with the same name gets overlaid |
| * @param propName the name of this property (should be unique per property) |
| * @param propValue the properties value Object |
| * @since 0.1 (Philly 99 meeting) |
| * @throws java.lang.IllegalArgumentException if the propName or propValue is null |
| */ |
| public Object addProperty( String propName, Object propValue ) throws IllegalArgumentException; |
| |
| /** |
| * Looks for a property with name specified and removes it |
| * @param propName the name String of the property to remove |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public Object removeProperty( String propName ); |
| |
| /** |
| * @return true if the two JposEntries have the same properties |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public boolean equals( JposEntry otherEntry ); |
| |
| /** |
| * @return the JposRegPopulator that loads/saves this entry. If null the default |
| * populator is used |
| * @since 1.3 (Washington DC 2001 meeting) |
| */ |
| public JposRegPopulator getRegPopulator(); |
| |
| /** |
| * @return the logical name for this JposEntry. This is a shortcut for easily getting |
| * the logical name vs getting a property and passing the logical name constant |
| * @see jpos.config.JposEntry#getPropertyValue |
| * @see jpos.config.JposEntry#LOGICAL_NAME_PROP_NAME |
| * @since 1.3 (Washington DC 2001 meeting) |
| */ |
| public String getLogicalName(); |
| |
| /** |
| * Returns a JposEntry.Prop with name specified. |
| * <p><b> |
| * Changes to that property object are not reflected in this entry. You must |
| * apply the changes to the property to the entry by calling modifyProp() method |
| * </b></p> |
| * @return the JposEntry.Prop with name specified or null if no such property exist |
| * @param propName the property name |
| * @since 2.0.0 |
| */ |
| public JposEntry.Prop getProp( String propName ); |
| |
| /** |
| * Returns an Iterator of JposEntry.Prop in this entry |
| * <p><b> |
| * Changes to any of the returned property object are not reflected in this entry. |
| * You must apply the changes to the property to the entry by calling modifyProp() method |
| * </b></p> |
| * @return an Iterator over the properties in this JposEntry as JposEntry.Prop objects |
| * @since 1.3 (Washington DC 2001) |
| */ |
| public Iterator getProps(); |
| |
| /** |
| * Adds a new property |
| * @param prop the JposEntry.Prop to add |
| * @since 1.3 (Washington DC 2001 meeting) |
| * @throws java.lang.IllegalArgumentException if the prop is null |
| */ |
| public void add( JposEntry.Prop prop ) throws IllegalArgumentException; |
| |
| /** |
| * Looks for a property with name specified and removes it. If none exist then |
| * does nothing and return null |
| * @return the value for the name passed |
| * @param name the name String of the property to remove |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public void remove( JposEntry.Prop prop ); |
| |
| /** |
| * Modifies the property with name of property passed with the new value if |
| * that property currently exist in the entry otherwise does nothing |
| * @param prop the JposEntry.Prop to modify |
| * @since 2.0.0 |
| * @throws java.lang.IllegalArgumentException if the prop is null |
| */ |
| public void modify( JposEntry.Prop prop ) throws IllegalArgumentException; |
| |
| /** |
| * @return true if this entry has the property passed |
| * @param prop the JposEntry.Prop to check for |
| * @since 1.3 (Washington DC 2001 meeting) |
| */ |
| public boolean hasProp( JposEntry.Prop prop ); |
| |
| /** |
| * @return a JposEntry.Prop object created with the <name, value, type> tripplet |
| * passed as arguments |
| * @param propName the property name |
| * @param propValue the property value |
| * @param propType the property type (valid for this value) |
| * @throws jpos.config.JposConfigException if any of the argument is null or the |
| * property value and type mismatch or this is not a valid property type |
| * @see jpos.config.JposEntryConst#PROP_TYPES |
| * @since 2.0.0 |
| */ |
| public JposEntry.Prop createProp( String propName, Object propValue, Class propType ) throws JposConfigException; |
| |
| //------------------------------------------------------------------------- |
| // Inner interfaces |
| // |
| |
| /** |
| * Inner interface to represent a property of a JposEntry |
| * @author E. Michael Maximilien (maxim@us.ibm.com) |
| * @since 1.3 (Washington DC 2001) |
| */ |
| public interface Prop extends Comparable |
| { |
| /** @return the name of this property */ |
| public String getName(); |
| |
| /** @return the value of this property (the value is returned as an Object) */ |
| public Object getValue(); |
| |
| /** @return the value of this property as a String */ |
| public String getValueAsString(); |
| |
| /** |
| * Returns the Class object that is the type of this property value |
| * possible values returned are the java.lang wrapper classes for the |
| * primitive types e.g. Integer, Byte, Boolean, ... |
| * @return the type of this property as a java.lang.Class object |
| */ |
| public Class getType(); |
| |
| /** |
| * Sets the name of this property |
| * @param s the String object |
| * @throws java.lang.IllegalArgumentException if the value is null |
| */ |
| public void setName( String s ) throws IllegalArgumentException; |
| |
| /** |
| * Sets the value of this property (String). Also sets its Type. |
| * <p><b>This is the default type of any property</b></p> |
| * @param objValue the object value |
| * @throws java.lang.IllegalArgumentException if the value is null or |
| * that this is not a valid typed property value |
| */ |
| public void setValue( Object objValue ) throws IllegalArgumentException; |
| |
| /** |
| * @return true if the property is of the type specified by the Class |
| * object passed |
| * @param type the Class object |
| */ |
| public boolean isOfType( Class type ); |
| |
| /** |
| * @return true if this and otherProp have same name and value |
| * @param otherProp the other JposEntry.Prop |
| */ |
| public boolean equals( Object otherProp ); |
| |
| /** @return a new copy of this JposEntry.Prop object */ |
| public JposEntry.Prop copy(); |
| } |
| |
| //------------------------------------------------------------------------- |
| // Interface constants |
| // |
| |
| /** |
| * JposEntry property name defining the JposServiceInstanceFactory class for this JposEntry |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public static final String SI_FACTORY_CLASS_PROP_NAME = "serviceInstanceFactoryClass"; |
| |
| /** |
| * JposEntry property name that must be defined by all JposEntry objects used to create services |
| * @since 0.1 (Philly 99 meeting) |
| */ |
| public static final String LOGICAL_NAME_PROP_NAME = "logicalName"; |
| |
| /** |
| * JposEntry property name that specifies the fully qualified class name for the service |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String SERVICE_CLASS_PROP_NAME = "serviceClass"; |
| |
| /** |
| * The vendor name string |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String VENDOR_NAME_PROP_NAME = "vendorName"; |
| |
| /** |
| * The vendor URL string |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String VENDOR_URL_PROP_NAME = "vendorURL"; |
| |
| /** |
| * The device category for the service must be one of JavaPOS defined categories |
| * i.e. CashDrawer, CashChanger, MSR, MICR, ... |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String DEVICE_CATEGORY_PROP_NAME = "deviceCategory"; |
| |
| /** |
| * The JavaPOS version supported by this service (i.e. 1.4, 1.5...) |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String JPOS_VERSION_PROP_NAME = "jposVersion"; |
| |
| /** |
| * A short name for this product |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String PRODUCT_NAME_PROP_NAME = "productName"; |
| |
| /** |
| * A string description for this product |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String PRODUCT_DESCRIPTION_PROP_NAME = "productDescription"; |
| |
| /** |
| * The product's URL string |
| * @since 1.2 (NY 2K meeting) |
| */ |
| public static final String PRODUCT_URL_PROP_NAME = "productURL"; |
| } |