question: public void modify ( SSOToken token , String objName , ModificationItem [ ] mods ) throws SMSException , SSOException { if ( ( objName == null ) || ( objName . length ( ) == 0 ) || ( mods == null ) || ( mods . length == 0 ) ) { throw new IllegalArgumentException ( "SMSEnhancedFlatFileObject.modify: " + "One or more arguments is null or empty" ) ; } mRWLock . readRequest ( ) ; try { if ( ! root . isExists ( mRootDir , objName ) ) { String errmsg = "SMSEnhancedFlatFileObject.modify: object " + objName + " not found." ; mDebug . error ( errmsg ) ; throw new ServiceNotFoundException ( errmsg ) ; } } finally { mRWLock . readDone ( ) ; } mRWLock . writeRequest ( ) ; try { SMSFlatFileTreeNode node = root . getChild ( objName ) ; if ( node == null ) { String errmsg = "SMSEnhancedFlatFileObject.modify: object " + objName + " not found." ; mDebug . error ( errmsg ) ; throw new ServiceNotFoundException ( errmsg ) ; } String filepath = node . getAttributeFilename ( mRootDir ) ; if ( filepath == null ) { String errmsg = "SMSEnhancedFlatFileObject.modify: object " + objName + " not found." ; mDebug . error ( errmsg ) ; throw new ServiceNotFoundException ( errmsg ) ; } File filehandle = new File ( filepath ) ; if ( ! filehandle . isFile ( ) ) { String errmsg = "SMSEnhancedFlatFileObject.modify: Attributes file for " + "object " + objName + " not found." ; mDebug . error ( errmsg ) ; throw new ServiceNotFoundException ( errmsg ) ; } Properties props = loadProperties ( filehandle , objName ) ; boolean hasSunXmlKeyValue = props . getProperty ( SMSEntry . ATTR_XML_KEYVAL ) != null ; for ( int i = 0 ; i < mods . length ; i ++ ) { modifyValues ( objName , mods [ i ] , props ) ; } saveProperties ( props , filehandle , objName ) ; String newSunXMLKeyValue = props . getProperty ( SMSEntry . ATTR_XML_KEYVAL ) ; if ( newSunXMLKeyValue != null ) { Set xmlKeyVals = toValSet ( SMSEntry . ATTR_XML_KEYVAL , newSunXMLKeyValue ) ; if ( ! hasSunXmlKeyValue ) { deleteSunXmlKeyValFiles ( node ) ; } createSunXmlKeyValFiles ( node , xmlKeyVals ) ; saveDirectoryTree ( ) ; } } finally { mRWLock . writeDone ( ) ; } }
target:  Modifies the attributes for the given configuration object.