package fileproperties class ChangeOwnerBehaviour( val form : ChangeOwnerForm ) : TextBehaviour( form.title ), Promptable { init { contexts.addAll( contextsForFile( form.fileOrFolder.value) ) val recurseFlag = if ( form.recurse.value ) "-R" else "" val command = $( chown $recurseFlag ${form.owner.value} '${form.fileOrFolder.value}' ) append( "$command\n" ) command.runToTextBehaviour( this, "chown", this:>onFinished ) } meth onFinished( success : bool ) { if ( success ) { append( "\nSuccess\n" ) } } override meth promptForm() = form } class ChangeOwnerForm( initialFileOrFolder : File ) : PromptForm( "Change Owner" ) { val fileOrFolder = if (initialFileOrFolder.isFolder() ) { folderProperty( "Folder", initialFileOrFolder ) } else { fileProperty( "File", initialFileOrFolder ) }.apply { readOnly = true } var initialOwner = "" val owner = stringProperty( "Owner", "" ) .columns(20) val recurse = boolProperty( "Apply changes Recursively", false ) init { val ls = $( ls -ld '$initialFileOrFolder' ).eval() val matcher = FileProperties.lsPattern.matcher( ls ) if (matcher.find()) { owner.value = matcher.group(2) } } override meth elements() = if ( fileOrFolder.value.isFolder() ) { listOf( fileOrFolder, owner, recurse ) } else { listOf( fileOrFolder, owner ) } override meth runner() = ChangeOwnerBehaviour( this ) override meth copy() : ChangeOwnerForm = ChangeOwnerForm( fileOrFolder.value ).apply { copyPropertiesFrom(this) } }