package com.inet.gradle.setup.dmg;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.attribute.PosixFilePermission;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import com.inet.gradle.setup.Template;
import com.inet.gradle.setup.abstracts.Application;
/**
* Create scripts from templates and replace placeholders
* according to configuration/application
*
* @author gamma
*
*/
public class OSXScriptBuilder extends Template {
private ArrayList<OSXScriptBuilder> scripts = new ArrayList<OSXScriptBuilder>();
/**
* Create an OSX script using the specified template
*
* @param template to create script from
* @throws IOException in case of errors
*/
public OSXScriptBuilder( String template ) throws IOException {
super( template );
}
/**
* Creates an instance and concatenates the script from the input lines
*
* @param script input lines
*/
public OSXScriptBuilder( ArrayList<String> script ) {
super( script );
}
/**
* Create an OSX script using the specified template
*
* @param application to use for initial setup
* @param template to create script from
* @throws IOException in case of errors
*/
public OSXScriptBuilder( Application application, String template ) throws IOException {
super( template );
setPlaceholder( "executable", application.getExecutable() );
setPlaceholder( "displayName", application.getDisplayName() );
setPlaceholder( "serviceName", application.getMainClass() );
setPlaceholder( "mainClass", application.getMainClass() );
setPlaceholder( "mainJar", application.getMainJar() );
setPlaceholder( "workingDir", application.getWorkDir() );
}
/**
* Add another subscript. These will be inserted at the {{script}} tokens
*
* @param script to add
*/
public void addScript( OSXScriptBuilder script ) {
scripts.add( script );
}
/**
* Create a string containing all subscripts
*
* @return string of all the scripts.
*/
public String toString() {
StringBuilder sb = new StringBuilder();
for( OSXScriptBuilder osxScriptBuilder : scripts ) {
if( osxScriptBuilder == null ) {
continue;
}
sb.append( osxScriptBuilder.toString() );
}
setPlaceholder( "script", sb.toString() );
return super.toString();
}
/**
* Write file and set permissions
*
* @param file to write to
* @throws IOException that can occur
*/
public void writeTo( File file ) throws IOException {
try (FileWriter writer = new FileWriter( file )) {
writer.write( toString() );
}
super.writeTo( file );
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add( PosixFilePermission.OWNER_READ );
perms.add( PosixFilePermission.OWNER_WRITE );
perms.add( PosixFilePermission.GROUP_READ );
perms.add( PosixFilePermission.OTHERS_READ );
perms.add( PosixFilePermission.OWNER_EXECUTE );
perms.add( PosixFilePermission.GROUP_EXECUTE );
perms.add( PosixFilePermission.OTHERS_EXECUTE );
Files.setPosixFilePermissions( file.toPath(), perms );
}
@Override
public OSXScriptBuilder setPlaceholder( String placeholder, String content ) {
super.setPlaceholder( placeholder, content );
return this;
}
}