blob: c830d34af456c0b72452a721ab0e42146088e078 [file] [log] [blame]
package org.qi4j.tools.shell.model;
import java.io.File;
import java.io.IOException;
import org.qi4j.api.injection.scope.This;
import org.qi4j.api.mixin.Mixins;
import org.qi4j.api.property.Property;
import org.qi4j.tools.shell.model.generation.AssemblerGenerator;
@Mixins( { AssemblerModel.Mixin.class, AssemblerGenerator.class } )
public interface AssemblerModel
{
// Commands
void generate( Project project, File projectDir )
throws IOException;
// Queries
String packageName();
// Queries
File mainJavaRootPackageDirectory( File projectDir );
File mainResourcesRootPackageDirectory( File projectDir );
File testJavaRootPackageDirectory( File projectDir );
File testResourcesRootPackageDirectory( File projectDir );
interface State
{
Property<String> packageName();
}
abstract class Mixin
implements AssemblerModel
{
@This
private State state;
@Override
public File mainJavaRootPackageDirectory( File projectDir )
{
return normalize( projectDir, "/bootstrap/src/main/java" );
}
@Override
public File mainResourcesRootPackageDirectory( File projectDir )
{
return normalize( projectDir, "/bootstrap/src/main/resources" );
}
@Override
public File testJavaRootPackageDirectory( File projectDir )
{
return normalize( projectDir, "/bootstrap/src/test/java" );
}
@Override
public File testResourcesRootPackageDirectory( File projectDir )
{
return normalize( projectDir, "/bootstrap/src/test/resources" );
}
private File normalize( File projectDir, String location )
{
File dir = new File( projectDir, location );
dir = new File( dir, state.packageName().get().replace( '.', '/' ) );
dir.mkdirs();
return dir;
}
@Override
public String packageName()
{
return state.packageName().get();
}
}
}