package fileproperties class ChangeGroupBehaviour( val form : ChangeGroupForm ) : TextBehaviour( form.title ), Promptable { init { contexts.addAll( contextsForFile( form.fileOrFolder.value) ) val recurseFlag = if ( form.recurse.value ) "-R" else "" val command = $( chgrp $recurseFlag ${form.group.value} '${form.fileOrFolder.value}' ) append( "$command\n" ) command.runToTextBehaviour( this, "chgrp", this:>onFinished ) } meth onFinished( success : bool ) { if ( success ) { append( "\nSuccess\n" ) } } override meth promptForm() = form } class ChangeGroupForm( initialFileOrFolder : File ) : PromptForm( "Change Group" ) { val fileOrFolder = if (initialFileOrFolder.isFolder() ) { folderProperty( "Folder", initialFileOrFolder ) } else { fileProperty( "File", initialFileOrFolder ) }.apply { readOnly = true } val group = stringProperty( "Group", "" ) .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()) { group.value = matcher.group(3) } } override meth elements() = if ( fileOrFolder.value.isFolder() ) { listOf( fileOrFolder, group, recurse ) } else { listOf( fileOrFolder, group ) } override meth runner() = ChangeGroupBehaviour( this ) override meth copy() : ChangeGroupForm = ChangeGroupForm( fileOrFolder.value ).apply { copyPropertiesFrom(this) } }